1

我有这个后端项目,在设置环境变量的情况下在本地启动它时工作得很好.env,但是当我尝试创建一个docker-compose以继续使用它时Docker,出现以下错误AuthenticationFailed: SCRAM authentication failed, storedKey mismatch

问题是用户和密码都完全相同,我在本地使用并使用mongo-init.jsfile 和 withMONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORDon设置它们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`;
}
4

0 回答 0