我有这个后端项目,在设置环境变量的情况下在本地启动它时工作得很好.env
,但是当我尝试创建一个docker-compose
以继续使用它时Docker
,出现以下错误AuthenticationFailed: SCRAM authentication failed, storedKey mismatch
。
问题是用户和密码都完全相同,我在本地使用并使用mongo-init.js
file 和 withMONGO_INITDB_ROOT_USERNAME
和MONGO_INITDB_ROOT_PASSWORD
on设置它们docker-compose.yml
。
我做错了什么导致我的节点服务器无法与 Mongo 连接?它与 Redis 完美连接,但使用 Mongo 我遇到了这个身份验证错误。
. 码头工人日志
server | [2021-03-30T11:49:22.346Z] [DEBUG] : mongo.connection connect Creating connection to MongoDB - data: "mongodb://user:password@database:27017/dbname?authSource=admin"
mongo | {"t":{"$date":"2021-03-30T11:49:22.701+00:00"},"s":"I", "c":"ACCESS", "id":20249, "ctx":"conn2","msg":"Authentication failed","attr":{"mechanism":"SCRAM-SHA-256","principalName":"user","authenticationDatabase":"admin","client":"172.30.0.4:32986","result":"AuthenticationFailed: SCRAM authentication failed, storedKey mismatch"}}
mongo | {"t":{"$date":"2021-03-30T11:49:22.708+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn1","msg":"Connection ended","attr":{"remote":"172.30.0.4:32984","connectionId":1,"connectionCount":1}}
server | [2021-03-30T11:49:22.712Z] [WARN] : mongo.connection _registerConnectionEvents MongoDB disconnected
server | [2021-03-30T11:49:22.715Z] [ERROR] : mongo.connection connect MongoDB connection error - data: {"type":"MongoError","message":"Authentication failed."}
server | [2021-03-30T11:49:22.717Z] [ERROR] : mongo.connection _registerConnectionEvents MongoDB event error - data: {"type":"MongoError","message":"Authentication failed."}
. 码头工人-compose.yml
...
database:
image: mongo
container_name: mongo
restart: always
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=some_user
- MONGO_INITDB_ROOT_PASSWORD=some_password
volumes:
- ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
- ./mongo-volume:/data/db
redis:
...
server:
build: .
container_name: server
depends_on:
- database
- redis
environment:
- DB_HOST=database
- DB_PORT=27017
- DB_NAME=dbname
- DB_USER=user
- DB_PASS=password
- DB_POOL_SIZE=5,
- DB_CONNECTION_RETRY_INTERVAL=5000
- PORT=3000
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=password
ports:
- "3000:3000"
volumes:
- .:/usr/app
...
. mongo-init.js
db.auth("some_user", "some_password");
db.createUser(
{
user: "user",
pwd: "password",
roles: [
{
role: "readWrite",
db: "dbname"
}
]
}
);
. 节点上的连接 URL
_getConnectionUrl() {
const { DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASS } = process.env;
return `mongodb://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}?authSource=admin`;
}