
[英]MongoDB + Mongo-Express docker-compose causing MongoError: Authentication failed
[英]MongoError: Authentication failed with docker-compose
我正在尝试构建此应用程序https://github.com/dwgebler/node-express-example 。 我想用它作为制作 Mongodb http 快递服务器的模板。 我试图在这个 repo 中构建 docker 撰写文件,它看起来像这样(稍作修改):
version: "3.8"
services:
database:
image: mongo
container_name: mongo-database
restart: always
volumes:
- "mongodata:/data/db"
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
container_name: mongo-express
restart: always
ports:
- "8081:8081"
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_SERVER: mongo-database
web:
image: node:16-alpine
container_name: node-server
restart: always
user: "node"
ports:
- "9443:443"
volumes:
- "./app:/var/app/"
working_dir: "/var/app"
environment:
NODE_ENV: dev
DB_USER: root
DB_PASSWORD: example
DB_NAME: mongo-database
command: "./wait.sh mongo-database 27017 'npm start'"
volumes:
mongodata:
但是当我在与 docker-compose.yml 文件相同的目录中运行命令 docker compose up -d 时,我在“节点服务器”容器日志中得到了这个:
Mongo started
MongoError: Authentication failed.
at MessageStream.messageHandler (/var/app/node_modules/mongodb/lib/cmap/connection.js:272:20)
at MessageStream.emit (node:events:513:28)
at processIncomingData (/var/app/node_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (/var/app/node_modules/mongodb/lib/cmap/message_stream.js:42:5)
at writeOrBuffer (node:internal/streams/writable:391:12)
at _write (node:internal/streams/writable:332:10)
at MessageStream.Writable.write (node:internal/streams/writable:336:10)
at Socket.ondata (node:internal/streams/readable:754:22)
at Socket.emit (node:events:513:28)
at addChunk (node:internal/streams/readable:315:12) {
ok: 0,
code: 18,
codeName: 'AuthenticationFailed'
}
为什么我会收到 MongoError:身份验证失败? 请注意,我设置
DB_USER: root
DB_PASSWORD: example
DB_NAME: mongo-database
在 docker 文件的web
部分中,它与数据库部分中的MONGO_INITDB_ROOT_USERNAME
、 MONGO_INITDB_ROOT_PASSWORD
匹配,我将DB_NAME
设置为与数据库部分名称匹配的mongo-database
。 那么为什么不进行身份验证呢?
MONGO_INITDB_ROOT_USERNAME
和PASSWORD
在 Mongo 管理数据库中创建一个用户。 您的连接字符串尝试针对mongo-database
数据库进行身份验证,但找不到用户。 Mongo 日志中有消息告诉您这一点。
要修复它,您需要通过将authSource=admin
添加到您的连接字符串来对 admin 数据库进行身份验证,如下所示
const uri = `mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@mongo-database/${process.env.DB_NAME}?retryWrites=true&writeConcern=majority&authSource=admin`;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.