小编jOH*_*dOE的帖子

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

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

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

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

  1. 清理/销毁容器(docker-compose down)
  2. 使用mongodb创建一个docker容器并启动它(不带--auth parameter)
  3. 执行包含的java脚本 db.createUser()
  4. 停止容器
  5. 使用--auth参数重新启动相同的容器,以允许使用在javascript中创建的用户进行登录

我找不到如何用docker-compose正确地做到这一点,因为当它开始时,我必须给它命令--auth.如果我这样做,我就无法执行我的javascript来添加我的用户.如果没有用户且未提供--auth参数,MongoDB允许用户创建而无需登录.

我想自动执行此操作,我不想手动执行某些命令.目标是在每次集成测试之前创建一个可以从干净的数据库启动的脚本.

这是我的项目:

集成测试/ src目录/测试/资源/脚本/泊坞窗,compose.yml

mongodb:
    container_name: mongo
    image: mongo
  ports:
    - "27017:27017"
  volumes:
    - .:/setup
  command: --auth
Run Code Online (Sandbox Code Playgroud)

集成测试/ src目录/测试/资源/脚本/ docker-init.sh

docker-compose down
docker-compose up -d
sleep 1
docker exec mongo bash -c "mongo myDatabase /setup/mongodb-setup.js"
Run Code Online (Sandbox Code Playgroud)

集成测试/ src目录/测试/资源/脚本/ MongoDB的-setup.js

db.createUser(
{
    user: "myUser",
    pwd: "myPassword",
    roles: [
      { role: "readWrite", db: "myDatabase" }
    ]
})
Run Code Online (Sandbox Code Playgroud)

找到一种方法再次启动一个带有新参数的容器(在这种情况下--auth)会有所帮助,但我找不到如何做到这一点(docker start不接受参数).

知道我应该怎样做我想做的事吗?

如果没有,我仍然可以使用一些Java代码或其他东西从我的数据库中删除所有内容,但我希望使用脚本创建一个完整的mongodb docker设置.

mongodb docker docker-compose

30
推荐指数
5
解决办法
4万
查看次数

标签 统计

docker ×1

docker-compose ×1

mongodb ×1