Docker 中的 MongoDB 身份验证失败

big*_*055 6 mongodb docker docker-compose

我的 docker-compose.yml

  mongo:
    image: mongo
    volumes:
      - ./mongo:/data/db
    ports:
      - 27017:27017
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: pass

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: pass
      ME_CONFIG_MONGODB_URL: mongodb://root:pass@mongo:27017/
Run Code Online (Sandbox Code Playgroud)

当我运行时,docker-compose up它会记录以下错误

对于 mongo 服务: UnhandledPromiseRejectionWarning:MongoNetworkError:首次连接时无法连接到服务器 [mongo:27017] [MongoError:身份验证失败。

对于 mongo-express 服务: “error”:“UserNotFound:无法找到数据库“admin”的用户“root”

我尝试添加?authSource=admin到 ME_CONFIG_MONGODB_URL 但错误仍然存​​在。

小智 0

我认为问题出在启动mongodb时没有运行命令--auth。mongodb 映像默认情况下不运行--auth,必须使用该command标志覆盖。

与您的示例类似,docker-compose 使用 Mongodb 的环境变量来创建 init 用户,因此启用身份验证应该可以解决身份验证问题。

  mongodb:
    hostname: your_hostname
    image: mongo:latest
    volumes:
      - ./mongo:/data/db
    ports:
      - 27017:27017
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME=${MONGODB_USER}
      - MONGO_INITDB_ROOT_PASSWORD=${MONGODB_PASSWORD}
      - MONGO_INITDB_DATABASE=${DATABASE}
    command: mongod --auth --port 27017
Run Code Online (Sandbox Code Playgroud)