aml*_*ker 7 authentication mongodb docker-compose
我在Compose中创建了一个mongo容器:
version: '2'
volumes:
mongodata:
driver: local
services:
mongo:
image: mongo:latest
hostname: ${MONGODB_HOST}
restart: always
ports:
- "27017:27017"
volumes:
- mongodata:/data/db
Run Code Online (Sandbox Code Playgroud)
这很好用,但是现在我想在数据库上输入密码.为此,首先根据我的理解,我需要创建数据库,添加密码,然后使用--auth标志重新启动它.我的问题是如何使用docker-compose完成此过程.
如果我在没有docker-compose的情况下做所有事情,我可以做到这一点.我能看到的问题包括:
a)docker-compose在docker网络内工作.b)docker-compose在生产过程中不能在开始时运行不同的命令.- 这很重要,因为虽然有些人说你可以--auth在开始时运行并且它允许你第一次设置密码,但事实似乎并非如此.
我开始研究的一个解决方案是在运行docker-compose文件之前在我的所有服务器上运行的shell脚本:
# start the temporary container
docker run -d -v /tmp/mongodb --name tmpdb -e MONGODB_DBNAME=db_test mongo --auth
# do the user creation
docker run -it --link tmpdb --rm mongo sh -c 'mongo --host tmpdb --eval "db.createUser({ user: \"admin\", pwd: \"password\", roles: [ { role: \"root\", db: \"admin\" } ] });"'
# stop the server
docker stop tmpdb
# create new mongodb container, using the old ones data
docker run -d -p 27017:27017 --name mongo2 -e MONGODB_DBNAME=db_test mongo --auth
# clean up old container (we are using the volumes so they will stick around)
docker rm tmpdb
Run Code Online (Sandbox Code Playgroud)
此文件创建一个临时容器,在其上设置用户名/密码,停止原始容器,使用旧容器创建一个新容器,并删除原始容器.新的mongo容器现在有一个密码.
所以我的结论性问题是,在docker-compose中最好的方法是什么?
我的docker-compose文件中的其他容器需要能够访问mongo所以我认为持有mongo数据的卷容器需要与docker-compose创建的同一网络
编写本文时的 mongo:latest 镜像 (v 3.5) 接受两个环境变量,MONGO_INITDB_ROOT_USERNAME以及MONGO_INITDB_ROOT_PASSWORD.
设置这些后,容器的入口点脚本将使用 --auth 启动 mongod 服务,然后使用提供的凭据创建管理员用户。
这目前没有记录在他们的 中README,但有一个GitHub 问题跟踪此事的进展,源代码可在docker-entrypoint.sh脚本的线上104获得。
要在您的 中使用这些变量docker-compose.yml,请参阅以下代码段:
version: '3'
services:
mongodb:
image: mongo:3.5
hostname: ${MONGODB_HOST}
environment:
- MONGO_INITDB_ROOT_USERNAME=alice
- MONGO_INITDB_ROOT_PASSWORD=super-secret-password
restart: on-failure
ports:
- 27017:27017
volumes:
- ./mongodb:/data/db
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2820 次 |
| 最近记录: |