Docker + supervisord:如何初始化服务(mongo& elasticmq)?

时间:2015-05-07 03:39:17

标签: mongodb docker supervisord

我正在使用supervisord的docker来创建我们使用的某些服务的测试环境,如docker doc中所建议的那样。服务的基本配置正在运行,我可以/ bin / bash容器并从我的应用程序中使用它而没有问题(手动初始化)

现在我需要向mongo添加一些对象:基本数据来测试应用程序。有推荐的方法吗?使用bash脚本我会这样做:

...
# Launch Mongodb
/usr/bin/mongod &
sleep 3;
mongo --eval "db.getSiblingDB('MyDDBB').User.save( {...} )";
...

但是那个bash正是我想要摆脱的。 elasticmq的使用完全相同:当容器开始运行时,我需要运行一些创建一些队列的东西,所以可能有一种解决方案适合两者。

我愿意接受不同的解决方案(更换主管?)

1 个答案:

答案 0 :(得分:1)

我不知道你是否还在寻找一个完美的解决方案,这可能不是那个,但它对我有用:

在我的docker-compose.yml中,我将其设置为使用我自己的入口点:

mongodb:
    image: mongo:2.4
    entrypoint: /code/devops/current/docker/dev/mongodb/entrypoint.sh
    volumes:
        - ~/Workspaces/project/devops/:/code/devops/current/

我的入口点首先在后台启动mongod,执行一个javascript文件kill mongo并将其作为主进程启动,如下所示:

#!/bin/bash

mongod --noprealloc --smallfiles &
PID="$!"

echo "WAITING FOR INIT"
sleep 3

echo "--> init"
mongo /code/devops/current/docker/dev/mongodb/init.js
echo "--> init [DONE]"

kill $PID

echo "WAITING FOR KILL"
sleep 3

mongod --noprealloc --smallfiles --auth

在init.js中,我确保创建了我的表,并让用户需要访问它,所以它是一堆:

db = db.getMongo().getDB('mydbname')
db.createCollection('mycollection')
db.addUser({user: "devuser", pwd: "mypassword", roles: ["readWrite"]})

所以我想你必须适应几乎所有的东西,但它让我开始我的开发环境;)