MongoDB + Mongo-Express docker-compose 导致 MongoError: 认证失败

12

我已经在这个问题上花了几个小时,但我真的不知道还能做什么(我所做的所有研究都没有提供任何解决方案)。所以我想问问是否有人能想出为什么这不起作用:

我运行一个包含mongo和mongo-express镜像的docker-compose文件。使用这里提供的默认代码不起作用(mongo-express停止并显示退出码1),所以我尝试了很多配置,留下了下面的docker-compose文件(实际上可以使mongo-express启动并在GUI中显示如下:

Databases: admin

Server Status: Turn on admin in config.js to view server stats!

但从那里开始,什么都不起作用。控制台显示了问题:

mongoviewer_1  | Database connected
database_1     | 2018-08-22T09:15:27.743+0000 I ACCESS   [conn2] SASL SCRAM-SHA-1 authentication failed for admin on admin from client; UserNotFound: Could not find user admin@admin

mongoviewer_1  | unable to list databases
mongoviewer_1  | { MongoError: command listDatabases requires authentication
mongoviewer_1  |     at Function.MongoError.create (/node_modules/mongodb-core/lib/error.js:31:11)
mongoviewer_1  |     at /node_modules/mongodb-core/lib/connection/pool.js:483:72
mongoviewer_1  |     at authenticateStragglers (/node_modules/mongodb-core/lib/connection/pool.js:429:16)
mongoviewer_1  |     at Connection.messageHandler (/node_modules/mongodb-core/lib/connection/pool.js:463:5)
mongoviewer_1  |     at Socket.<anonymous> (/node_modules/mongodb-core/lib/connection/connection.js:319:22)
mongoviewer_1  |     at emitOne (events.js:116:13)
mongoviewer_1  |     at Socket.emit (events.js:211:7)
mongoviewer_1  |     at addChunk (_stream_readable.js:263:12)
mongoviewer_1  |     at readableAddChunk (_stream_readable.js:250:11)
mongoviewer_1  |     at Socket.Readable.push (_stream_readable.js:208:10)
mongoviewer_1  |   name: 'MongoError',
mongoviewer_1  |   message: 'command listDatabases requires authentication',
mongoviewer_1  |   ok: 0,
mongoviewer_1  |   errmsg: 'command listDatabases requires authentication',
mongoviewer_1  |   code: 13,
mongoviewer_1  |   codeName: 'Unauthorized' }

docker-compose文件如下所示:

  database:
    image: mongo:latest
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: password
      MONGO_INITDB_DATABASE: dockerdb
    ports:
    - "27017:27017"
  mongoviewer:
    image: mongo-express
    environment:
      ME_CONFIG_MONGODB_SERVER: database
      ME_CONFIG_BASICAUTH_USERNAME: ""
      ME_CONFIG_MONGODB_AUTH_DATABASE: admin
      ME_CONFIG_MONGODB_AUTH_USERNAME: admin
      ME_CONFIG_MONGODB_AUTH_PASSWORD: password
      ME_CONFIG_MONGODB_ADMINUSERNAME: admin
      ME_CONFIG_MONGODB_ADMINPASSWORD: password
    ports:
    - "8081:8081"
    links:
    - database
    depends_on:
    - database

这是我尝试过的当前版本,我还尝试了许多其他配置,但没有解决身份验证问题。

如果有人有答案或至少有想法可以做些什么,我将非常感激!

2个回答

2

在配置docker-compose.yaml时,实际上有两种状态。虽然我不是专家,但这个解决方案对我很有帮助。

  1. 无需身份验证

默认情况下,当您运行mongo实例时,需要身份验证才能访问数据库,因为您指定了MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD

您可以通过删除这两个键来访问mongo中的数据库。

  1. 需要身份验证

根据mongo-express文档,默认情况下ME_CONFIG_MONGODB_ENABLE_ADMIN键为false,使得您的mongo-express应用程序不会尝试进行任何身份验证,直接连接到mongo实例(因此产生Authentication failed错误)。

您需要将ME_CONFIG_MONGODB_ENABLE_ADMIN键更改为true以启用它。请记住,在docker-compose.yaml中要将"true"转化为字符串格式。

确保ME_CONFIG_MONGODB_ADMINUSERNAMEME_CONFIG_MONGODB_ADMINPASSWORD键分别与MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD键匹配。


0

根据 Docker 文件中的信息,如果 MongoDB 运行在名为 "database" 的容器上,则可以使用以下方式从 mongo-express 访问它:

 docker run -it --rm \
--network web_default \
--name mongo-express \
-p 8081:8081 \
-e ME_CONFIG_MONGODB_SERVER=database \
-e ME_CONFIG_MONGODB_ADMINUSERNAME= admin \
-e ME_CONFIG_MONGODB_ADMINPASSWORD=password \
mongo-express

如需参考,请查看dockerhub上的mongo-express文档

注意:如果您想使用用户凭据访问特定数据库:

docker run -it --rm \
--network web_default \
--name mongo-express \
-p 8081:8081 \
-e ME_CONFIG_MONGODB_SERVER= database \
-e ME_CONFIG_MONGODB_AUTH_DATABASE= dockerdb \
-e ME_CONFIG_MONGODB_ENABLE_ADMIN=false \
-e ME_CONFIG_MONGODB_AUTH_USERNAME=admin \
-e ME_CONFIG_MONGODB_AUTH_PASSWORD=password \
mongo-express
 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接