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 身份验证

rmongodb 身份验证总是失败[重复]

尝试保存到 mongodb 时身份验证失败

MongoDB 通过 Mlab - MongoError:身份验证失败

无法连接到 MongoLab“身份验证失败”错误

无法连接到 MongoLab“身份验证失败”错误