我正在尝试创建某种脚本,该脚本将使用 mongodb 创建一个 docker 并自动创建一个用户。
我通常可以使用 docker-compose 管理我的 docker 镜像,但这次我不知道该怎么做。
基本上,这是我必须做的:
docker-compose down
)--auth参数
)db.createUser()
--auth
参数重新启动同一个容器,以允许使用在 javascript 中创建的用户登录我找不到如何使用 docker-compose 正确执行此操作,因为当它启动时,我必须给它命令 --auth。如果我这样做,我将无法执行我的 javascript 来添加我的用户。如果没有用户且没有提供 --auth 参数,MongoDB 允许在不登录的情况下创建用户。
我想自动执行,我不想手动执行某些命令。目标是有一个可以在每次集成测试之前从干净的数据库开始执行的脚本。
这是我的项目:
集成测试/src/test/resources/scripts/docker-compose.yml
mongodb:
container_name: mongo
image: mongo
ports:
- "27017:27017"
volumes:
- .:/setup
command: --auth
集成测试/src/test/resources/scripts/docker-init.sh
docker-compose down
docker-compose up -d
sleep 1
docker exec mongo bash -c "mongo myDatabase /setup/mongodb-setup.js"
集成测试/src/test/resources/scripts/mongodb-setup.js
db.createUser(
{
user: "myUser",
pwd: "myPassword",
roles: [
{ role: "readWrite", db: "myDatabase" }
]
})
找到一种方法重新启动具有新参数的容器(在本例中为 --auth
)会有所帮助,但我找不到如何做到这一点(docker start 不接受参数) .
知道我应该如何做我想做的事吗?
如果没有,我仍然可以使用一些 Java 代码或其他东西从我的数据库中删除所有内容,但我想要一个使用脚本创建的完整 mongodb docker 设置。
最佳答案
官方 mongo 镜像现在支持以下环境变量,可以在 docker-compose 中使用,如下所示:
environment:
- MONGO_INITDB_ROOT_USERNAME=user
- MONGO_INITDB_ROOT_PASSWORD=password
- MONGO_INITDB_DATABASE=test
更多解释见: https://stackoverflow.com/a/42917632/1069610
https://stackoverflow.com/questions/37423659/