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

我想启动一个docker for mongodb:latest但是只允许某些用户访问某些db(s)(即启用--auth )。 没有人应该访问mongodb! 作为docker启动的一部分,我应该如何做到这一点?

顺便说一下,在启动过程中,通过使用以下命令, data directory位于主机上: -v /my/own/datadir:/data/db

如果你看看:

你会注意到在docker-entrypoint.sh有两个variables:

  • 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用户,请使用入口点exectuable脚本(放置在$ 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." 

入口点脚本将被执行并且将创build另外的用户。

正式的mongo镜像的Dockerfile在这里 。 默认的命令是mongod,但是你可以覆盖添加–auth开关,假设用户已经configuration好了。

 docker run -d .... mongodb:latest mongod --auth 

如果必须创build用户,则需要将启动脚本批量安装到/entrypoint.sh以replace默认启动脚本,然后让该脚本创build用户并使用auth开关启动mongo。

 docker run -d .... -v $PWD/my_custom_script.sh:/entrypoint.sh mongodb:latest 

@jbochniak:谢谢,虽然起初我以为我已经发现了所有这一切,但事实certificate,你的例子(特别是Mongo Docker镜像的版本)帮了我的忙!

该版本(v3.4.2)和v3.4(目前对应于v3.4.3)仍然支持通过这些variables指定的“MONGO_INITDB_ROOT”, 从v3.5开始(至less标签为'3'和'latest')按照您的答案和文档中的描述进行工作

我很快看了一下GitHub上的代码,但看到了这些variables的类似用法,无法立即find错误,应该这样做之前提交作为一个错误…

使用这些图像来解决:

用docker-compose.yml

 services: db: image: aashreys/mongo-auth:latest environment: - AUTH=yes - MONGODB_ADMIN_USER=admin - MONGODB_ADMIN_PASS=admin123 - MONGODB_APPLICATION_DATABASE=sample - MONGODB_APPLICATION_USER=aashrey - MONGODB_APPLICATION_PASS=admin123 ports: - "27017:27017" // more configuration 
  • aashreys / mongo-auth – Docker Hub
  • aashreys / docker-mongo-auth:在Docker的官方MongoDB映像上轻松设置身份validation。

更好的解决scheme:
https://blog.madisonhub.org/setting-up-a-mongodb-server-with-auth-on-docker/ https://docs.mongodb.com/v2.6/tutorial/add-user-administrator/

这是我为同样的问题做了什么,它的工作。

  1. 在您的服务器上运行mongo docker实例

     docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo 
  2. 在运行的docker实例上打开bash。

     docker ps 

    容器IDIMAGE COMMAND创build状态端口名称

    b07599e429fb mongo“docker-entrypoint …”35分钟前向上35分钟0.0.0.0:27017->27017/tcp musing_stallman

     docker exec -it b07599e429fb bash root@b07599e429fb:/# 

    参考 – https://github.com/arunoda/meteor-up-legacy/wiki/Accessing-the-running-Mongodb-docker-container-from-command-line-on-EC2

  3. inputmongo进入mongo shell。

     root@b07599e429fb:/# mongo 
  4. 对于这个例子,我将设置一个名为ian的用户,并为该用户提供对cool_db数据库的读写权限。

     > use cool_db > db.createUser({ user: 'ian', pwd: 'secretPassword', roles: [{ role: 'readWrite', db:'cool_db'}] }) 

    参考: https : //ianlondon.github.io/blog/mongodb-auth/ (仅限第一点)

  5. 从mongod shell和bash退出。

  6. 现在运行启用auth的mongo docker。

     docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo mongod --auth 

    参考: 如何通过Docker在MongoDB上启用身份validation? (乌斯曼·伊斯梅尔对这个问题的回答)

  7. 我可以使用下面的命令从我的本地windows笔记本电脑连接到运行在Google Cloud服务器上的实例。

     mongo <ip>:27017/cool_db -u ian -p secretPassword 

    参考: 如何从Mac OSterminal连接到远程mongo服务器