我在撰写创建一个蒙戈容器:搬运工,撰写创建蒙戈容器中的用户名和密码
version: '2'
volumes:
mongodata:
driver: local
services:
mongo:
image: mongo:latest
hostname: ${MONGODB_HOST}
restart: always
ports:
- "27017:27017"
volumes:
- mongodata:/data/db
这完美的作品,但是现在我想提出一个密码数据库。为此,首先据我所知,我需要创建数据库,添加密码,然后用--auth
标志重新启动它。我的问题是如何用docker-compose完成这个过程。
我可以做到这一点,如果我做的一切都没有码头撰写。我能看到的问题包括:
a)docker-compose在码头网络中工作。 b)docker-compose在生产过程中不能在开始时运行不同的命令。 - 这很重要,因为尽管有些人说你可以在开始时运行--auth
,并且它可以让你第一次设置密码,但似乎并不是这样。
一个解决方案,我开始工作的是一个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
此文件创建一个临时容器,它设置一个用户名/密码,停止原始容器,使用旧容器创建新容器,并删除原始容器。新的mongo容器现在有一个密码。
所以我最终的问题是,在docker-compose中做这件事的最好方法是什么?
我在我的搬运工,撰写文件等容器必须能够访问蒙戈,所以我觉得体积集装箱保持蒙戈数据需要的泊坞窗,撰写创建