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

Docker + supervisord: how to initialize services (mongo & elasticmq)?

我正在使用 docker 和 supervisord to create tests environments with some services we use, as recommended in docker doc。服务的基本配置是 运行ning,我可以 /bin/bash 容器并从我的应用程序中毫无问题地使用它(手动进行一些初始化)

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

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

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

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

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

在我的 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 file 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"]})

所以我想你必须适应几乎所有的东西,但这让我为我的开发环境而努力 ;)