如何通过 Docker 在 MongoDB 上启用身份验证?

新手上路,请多包涵

我想为 mongodb:latest 启动一个 docker,但只允许某些用户访问某些数据库(即启用 --auth )。任何人都不应该访问 mongodb!作为 docker 启动的一部分,我应该如何做到这一点?

顺便说一句, data directory 在启动期间通过使用以下命令坐在主机上: -v /my/own/datadir:/data/db

原文由 user706838 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 690
1 个回答

如果你看看:

您会注意到 docker-entrypoint.sh 中使用了两个变量:

  • MONGO_INITDB_ROOT_USERNAME
  • MONGO_INITDB_ROOT_PASSWORD

您可以使用它们来设置 root 用户。例如,您可以使用以下 docker-compose.yml 文件:

 mongo-container:
  image: mongo:3.4.2
  environment:
      # provide your credentials here
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=rootPassXXX
  ports:
    - "27017:27017"
  volumes:
      # if you wish to setup additional user accounts specific per DB or with different roles you can use following entry point
    - "$PWD/mongo-entrypoint/:/docker-entrypoint-initdb.d/"
  # no --auth is needed here as presence of username and password add this option automatically
  command: mongod

现在,当通过 docker-compose up 启动容器时,您应该注意到以下条目:

 ...
I CONTROL  [initandlisten] options: { net: { bindIp: "127.0.0.1" }, processManagement: { fork: true }, security: { authorization: "enabled" }, systemLog: { destination: "file", path: "/proc/1/fd/1" } }
...
I ACCESS   [conn1] note: no users configured in admin.system.users, allowing localhost access
...
Successfully added user: {
    "user" : "root",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

要添加除 root 之外的自定义用户,请使用入口点可执行脚本(放置在 $PWD/mongo-entrypoint 目录下,因为它安装在 docker-compose 到入口点):

 #!/usr/bin/env bash
echo "Creating mongo users..."
mongo admin --host localhost -u USER_PREVIOUSLY_DEFINED -p PASS_YOU_PREVIOUSLY_DEFINED --eval "db.createUser({user: 'ANOTHER_USER', pwd: 'PASS', roles: [{role: 'readWrite', db: 'xxx'}]}); db.createUser({user: 'admin', pwd: 'PASS', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]});"
echo "Mongo users created."

将执行入口点脚本并创建其他用户。

原文由 jbochniak 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题