我正在尝试连接到 Mongo 容器,但我不断收到身份验证错误。
docker-compose.yaml
mongo:
image: mongo:latest
container_name: mongo
hostname: mongo
command: [--auth]
env_file: .env
volumes:
- ./docker/mongo-seed/scripts:/docker-entrypoint-initdb.d:ro
restart: always
ports:
- "27017:27017"
.env 文件
MONGO_DATABASE_NAME=app-local
MONGO_CONNECTION_STRING=mongodb://{0}:{1}@localhost:27017
MONGO_USER=user-local
MONGO_PASSWORD=pwd-local
脚本初始001_initial_script.js
db = db.getSiblingDB("admin")
db.createUser({
user: process.env["MONGO_USER"],
pwd: process.env["MONGO_PASSWORD"],
roles: [
{
role: 'dbOwner',
db: process.env["MONGO_DATABASE_NAME"],
},
],
});
db = db.getSiblingDB(process.env["MONGO_DATABASE_NAME"])
您在
admin
数据库中创建了用户,因此您必须连接
--authenticationDatabase admin
不与
--authenticationDatabase app-local
除此之外,仅当您创建了管理员用户(即具有
root
角色或至少 userAdminAnyDatabase
角色的用户)时,身份验证才会激活。我对docker不熟悉,不知道你的情况下是否已经创建了这样的用户。
然后,我认为覆盖内部和预定义的
db
变量并不明智。更好地利用这些:
db.getSiblingDB("admin").createUser(...)
use admin
db.createUser(...)
const admin = db.getSiblingDB("admin")
admin.createUser(...)