【发布时间】:2014-09-27 05:06:15
【问题描述】:
我正在使用以下 Dockerfile 设置一个容器
# Start with project/baseline
FROM project/baseline # => image with mongo / nodejs / sailsjs
# Create folder that will contain all the sources
RUN mkdir -p /var/project
# Load the configuration file and the deployment script
ADD init.sh /var/project/init.sh
ADD src/ /var/project/ # src contains a list of folder, each one being a sails app
# Compile the sources / run the services / run mongodb
CMD /var/project/init.sh
容器运行时调用 init.sh 脚本。 它应该启动几个 webapp 和 mongodb。
#!/bin/bash
PROJECT_PATH=/var/project
# Start mongodb
function start_mongo {
mongod --fork --logpath /var/log/mongodb.log # attempt to have mongo running in daemon
}
# Start services
function start {
for service in $(ls);do
cd $PROJECT_PATH/$service
npm start # Runs sails lift on each service
done
}
# start mongodb
start_mongo
# start web applications defined in /var/project
start
基本上,/var/project 中有几个 nodejs (sailsjs) 应用程序。
当我运行容器时,我收到以下消息:
$ sudo docker run -t -i 项目/测试 即将派生子进程,等待服务器准备好连接。 分叉进程:10
然后它仍然卡住。
如何启动mongo和sails进程并让容器保持运行状态?
更新
我现在使用这个 supervisord.conf 文件
[supervisord]
nodaemon=false
[program:mongodb]
command=/usr/bin/mongod
[program:process1]
command=/bin/bash "cd /var/project/service1 && node app.js"
[program:process2]
command=/bin/bash "cd /var/project/service2 && node app.js"
在 Dockerfile 中调用如下:
# run the applications (mongodb + project related services)
CMD ["/usr/bin/supervisord"]
由于我的服务依赖于 mongo 正确启动,supervisord 不会等待那么长时间,然后服务也不会启动。有什么办法解决这个问题吗?
顺便说一句,在同一个容器中使用 mongo 是一种最佳实践吗?
更新 2
我回到容器运行时调用的 service.sh 脚本。我知道这不干净(但我会说这是暂时的,所以我可以修复主管中的 pb),但我正在执行以下操作:
- 运行 nohup mongod &
- 等待 60 秒
- 运行我的节点(永久)进程
问题是,容器在永久进程运行后立即退出......它如何保持活动状态?
【问题讨论】:
标签: node.js mongodb docker sails.js