Docker mongo 身份验证失败,带有 URI
Posted
技术标签:
【中文标题】Docker mongo 身份验证失败,带有 URI【英文标题】:Docker mongo authentication failed with URI 【发布时间】:2021-03-20 11:38:34 【问题描述】:我正在尝试让 docker-compose 使用身份验证连接到 mongodb。在过去,我使用了一个包含用户名和密码的 URI 字符串,但是,当我运行 docker up
它返回 MongoError: Authentication failed.
使用终端时,我可以进入 docker 容器并使用 uri 字符串中的凭据手动访问 mongo,这意味着数据库正在运行。我是码头工人的新手。有人可以解释为什么我的 URI 字符串不起作用以及我应该如何修复它。
version: "3.8"
services:
product-service:
build:
context: "."
dockerfile: "./product-service/Dockerfile"
container_name: product-service
depends_on:
- product-service-db
ports:
- "7300:7300"
volumes:
- ./product-service:/opt/app
links:
- product-service-db
environment:
- DB_URI=mongodb://root:example@product-service-db:27017/Products
product-service-db:
image: mongo:4.4.2
restart: always
ports:
- "7399:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
【问题讨论】:
【参考方案1】:可行但我不知道为什么的解决方案是将?authSource=admin
添加到 URI 字符串中。
DB_URI=mongodb://root:example@product-service-db:27017/Products?authSource=admin
如果有人能够很好地解释为什么此解决方案有效,请随时更新答案。
【讨论】:
添加?authSource=admin
有效,因为默认情况下 mongo 默认为 test
数据库。大多数用户是在admin
数据库上创建的。这类似于此处的 java 等效答案:***.com/a/55138982/6281755
如果您使用的是 pymongo MongoClient
,只需在调用类时指定 authSource='the_database',
以上是关于Docker mongo 身份验证失败,带有 URI的主要内容,如果未能解决你的问题,请参考以下文章
通过 ansible playbook 启用 mongo 身份验证