【问题标题】:Docker mongo authentication failed with URIDocker mongo 身份验证失败,带有 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

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    可行但我不知道为什么的解决方案是将?authSource=admin 添加到 URI 字符串中。

    DB_URI=mongodb://root:example@product-service-db:27017/Products?authSource=admin

    如果有人能够很好地解释为什么此解决方案有效,请随时更新答案。

    【讨论】:

    • 添加 ?authSource=admin 有效,因为默认情况下 mongo 默认为 test 数据库。大多数用户是在admin 数据库上创建的。这类似于此处的 java 等效答案:stackoverflow.com/a/55138982/6281755
    • 如果您使用的是 pymongo MongoClient,只需在调用类时指定 authSource='the_database',
    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多