我正在通过docker compose启动一个mongo数据库,但现在无法连接到容器中的数据库。这是我的docker compose。
mongodb:
image: <from my private registry>
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: pass123
ports:
- 27017:27017
volumes:
- mongodata:/data/db
我使用docker composite up命令启动容器。现在我尝试进入mongo容器并连接到数据库,我看到以下错误。
> docker exec -it mymongo /bin/sh
mongo -u admin -p
MongoDB shell version v4.2.23
Enter password:
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
2022-11-23T05:21:04.225+0000 E QUERY [js] Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:353:17
@(connect):2:6
2022-11-23T05:21:04.228+0000 F - [main] exception: connect failed
2022-11-23T05:21:04.228+0000 E - [main] exiting with code 1
任何文档,我去,它说同样的事情来传递用户凭据,因为我在docker组成,但它不工作。进一步的错误在日志中
Creating databases...
Creating service_configs
Error creating database service_configs!
MongoError: command listCollections requires authentication
at MessageStream.messageHandler (/opt/pronghorn/itential-bundle-1-20202_2020.2.2/node_modules/@itential/database/node_modules/mongodb/lib/cmap/connection.js:268:20)
我做错了什么?
1条答案
按热度按时间zsohkypk1#
这个问题与docker无关,而是与Mongo DB中的身份验证工作方式有关。
左侧;右侧:
在login命令中添加
--authenticationDatabase admin
,即:mongo -u admin -p --authenticationDatabase admin
"为什么"
您正在连接到缺省数据库(很可能是
test
)作为admin
用户。admin
用户本身没有在test
数据库中定义,而是在admin
数据库中定义,因此您需要指出应该在哪里查找该用户。如果您在test
DB中创建一个新用户并使用他的凭据进行连接,--authenticationDatabase admin
将不再是必需的。