如何使用 docker-compose 在 mongodb 中创建用户

新手上路,请多包涵

我正在尝试创建某种脚本,该脚本将使用 mongodb 创建一个 docker 并自动创建一个用户。

我通常可以使用 docker-compose 管理我的 docker 映像,但这次,我不知道该怎么做。

基本上,这是我必须做的:

  1. 清洁/销毁容器( docker-compose down
  2. 使用 mongodb 创建一个 docker 容器并启动它(没有 --auth parameter
  3. 执行一个包含 db.createUser() 的java脚本
  4. 停止容器
  5. 使用 --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 设置。

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

阅读 1.4k
2 个回答

编辑: tutumcloud 存储库已弃用且不再维护,请参阅其他答案

我建议你使用环境变量来设置mongo用户、数据库和密码。 tutum (Docker所有)发布了一个很好的镜像

https://github.com/tutumcloud/mongodb

 docker run -d -p 27017:27017 -p 28017:28017 -e MONGODB_USER="user" -e MONGODB_DATABASE="mydatabase" -e MONGODB_PASS="mypass" tutum/mongodb

您可以将这些变量转换为 docker-compose 环境变量。您不必对其进行硬编码。

 environment:
    MONGODB_USER: "${db_user_env}"
    MONGODB_DATABASE: "${dbname_env}"
    MONGODB_PASS: "${db_pass}"

此配置将从您会话的环境变量中读取。

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

官方的 mongo 镜像现在支持以下可以在 docker-compose 中使用的环境变量,如下所示:

 environment:
      - MONGO_INITDB_ROOT_USERNAME=user
      - MONGO_INITDB_ROOT_PASSWORD=password
      - MONGO_INITDB_DATABASE=test

更多解释: https ://stackoverflow.com/a/42917632/1069610

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

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