我有一个可以在容器中正确安装Mongodb和Ops Manager的dockerfile。之后,我使用entrypoint.sh进行设置,在脚本的末尾放上了
echo "starting mongodb"
service mongod start
echo "starting opsmgr"
service mongodb-mms start
运行容器时,从日志消息中,永远不会执行启动ops manager行的行。
我该怎么做:如果mongodb启动,则执行service mongodb-mms start
?
由于操作管理器需要等待mongodb首先正确启动,因此不确定它是否在一个容器中运行多个服务。
答案 0 :(得分:0)
我发现这个Dockerfile
是用于非常旧的Ops Manager版本,但是它等待mongodb端口打开的方式仍然有效:https://github.com/deviantony/docker-opsmanager/blob/master/ops-manager/startup.sh
基本上,作者使用nc
等到标准mongod
端口接受与以下设备的连接:
echo "Waiting for MongoDB"
while true; do
nc -q 1 database 27017 >/dev/null && break
done
现在,请确保在调用Ops Manager时将其保留在前台,因为Docker需要运行一个进程。
您可以以service start mongodb-mms
开头,然后直接运行tail,例如:
echo "starting mongodb"
service mongod start
# snippet to wait for mongod to be in running state
echo "starting opsmgr"
service mongodb-mms start
# Keep this startup script busy, if it ends, the Docker container dies.
tail -f /opt/mongodb/mms/logs/mms0.log