使用docker时访问数据库时MongoDb身份验证失败?
我一直在尝试设置mongodb的密码 我的docker撰写文件是使用docker时访问数据库时MongoDb身份验证失败?,mongodb,docker,docker-compose,Mongodb,Docker,Docker Compose,我一直在尝试设置mongodb的密码 我的docker撰写文件是 version: "3" services: mongo: image: mongo ports: - "27016:27017" volumes: - ./data:/data/db environment: - MONGO_INITDB_ROOT_USERNAME=root
version: "3"
services:
mongo:
image: mongo
ports:
- "27016:27017"
volumes:
- ./data:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=password
- MONG_INITDB_DATABASE=example
现在在运行docker容器之后,当我尝试
进入容器后
连接成功,
MongoDB外壳版本4.2.7
连接到:mongodb://localhost:27017/?compressors=disabled&gssapiServiceName=mongodb
隐式会话:会话{id:UUID71ec853d-3a05-4367-aa9f-d0a69217fb7d}
MongoDB服务器版本:4.2.7
服务器有启动警告:
2020-06-16T17:43:51.837+0000 I存储[initandlisten]
2020-06-16T17:43:51.837+0000 I存储[initandlisten]**警告:强烈建议在WiredTiger存储引擎中使用XFS文件系统
2020-06-16T17:43:51.837+0000 I存储[initandlisten]**参见
但是当我尝试的时候
mongo mongodb://root:password@localhost:27017/example
身份验证失败。
MongoDB外壳版本4.2.7
连接到:mongodb://localhost:27017/example?compressors=disabled&gssapiServiceName=mongodb
2020-06-16T17:51:08.226+0000电子查询[js]错误:身份验证失败:
connect@src/mongo/shell/mongo.js:341:17
当我尝试使用节点应用程序从外部访问时也是如此。
也在使用docker compose运行节点应用程序
蒙戈mongodb://root:password@mongo:27017/示例您应该尝试连接到mongodb://root:password@localhost:27016/将docker容器的27017端口映射到主机的27016端口时,容器外部的示例。需要注意两件事: MONG_INITDB_数据库不会创建数据库,除非它位于数据卷绑定中,即./data:/data/DB。如果存在,则需要使用用于在数据下创建的特定角色 如果不是1,则需要提供一个文件,该文件将在/docker entrypoint initdb.d/*.js下创建数据库。以下是一个模板:
db.createUser(
{
user: "<user for database which shall be created>",
pwd: "<password of user>",
roles: [
{
role: "readWrite",
db: "<database to create>"
}
]
}
)
你可以向他们的官方网站查询更多信息。章节:MONGO_INITDB_数据库和初始化一个新实例不确定为什么没有在任何博客或教程中提及,但根据官方文档, 因此,最终有效的方法是添加authSource,在没有authSource的情况下,mongod在添加authSource后尝试在/example db中查找cred,从而给出错误
mongodb://root:password@localhost:27016/example?authSource=admin
这起作用并成功地将数据添加到示例数据库中您似乎正在主机系统上运行另一个mongod进程,请将端口27016用于容器1。当我访问容器内部时,其仍在默认27017上运行,当我访问节点应用程序外部时,我使用docker compose,因此DNS将mongo映射到容器IP,因此仍然是27017。我将它映射到27016外部,因为我在27017上运行了一个本地实例。对于任何有问题的人,请查看mongo时它连接的相同内容mongodb://root:password@localhost:27016,但在mongo时失败mongodb://root:password@localhost:27016/example不确定,但声明/defaultdb是检查身份验证详细信息的数据库,所以,当我尝试附加/admin时,它工作了,但我想指定新的dbYeah!如果您想连接示例,应该在docker compose环境变量MONGODB_DATABASE=example中定义MONGODB_mongodb://root:password@localhost:27016/example?authSource=admin这也可以工作连接字符串如下:mongodb://root:password@localhost:27016/example?authSource=example,如果您设置了该env变量
/defaultauthdb
Optional. The authentication database to use if the connection string includes username:password@ authentication credentials but the authSource option is unspecified.
If both authSource and defaultauthdb are unspecified, the client will attempt to authenticate the specified user to the admin database.
mongodb://root:password@localhost:27016/example?authSource=admin