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

我正在使用docker和supervisord来创buildtesting环境,使用我们使用的一些服务,正如docker doc中的build议。 服务的基本configuration正在运行,我可以/ bin / bash容器,并从我的应用程序使用它没有问题(有一些手工初始化)

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

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

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

我接受不同的解决scheme(改变主pipe?)

我不知道你是否还在寻找一个完美的解决scheme,这可能不是一个,但它适用于我:

在我的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中,我确保我的表已经创build,并且让用户访问它,所以它是一堆:

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

所以我想你必须适应几乎所有的东西,但是这使我得到了我的开发环境;)