原创内容, 禁止转载.
容器运行启动主要依靠 Dockerfile 里面的 ENTRYPOINT 和CMD
官方建议一个容器里面运行一个进程,如果我们需要多个进程运行就需要自己去定义脚本
我们现在程序有 ssh 和nodejs程序,而且在一个项目内部。如果我启动一个 sshd 进程那么 nodejs 进程无法启动,这个时候就需要自定义脚本。
示例脚本,我们可以根据自己的需要去修改定制
1. 定制脚本
#!/bin/bash
/usr/sbin/sshd &
status=$?
if [$status -ne 0]; then
echo "Failed to start sshd: $status"
exit $status
fi
cd /data/www/project && pm2 start app.js
if [$status -ne 0]; then
echo "Failed to start pm2: $status"
exit $status
fi
while /bin/true; do
ps aux |grep /usr/sbin/sshd |grep -q -v grep
PROCESS_1_STATUS=$?
ps aux |grep pm2 |grep -q -v grep
PROCESS_2_STATUS=$?
if [$PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0]; ]; then
echo "One of the processes has already exited."
exit -1
fi
sleep 60
done
Dockerfile 示例
COPY start.sh /usr/bin/start
RUN chmod +x /usr/bin/start
EXPOSE 22
EXPOSE 80
ENTRYPOINT ["/usr/bin/start"]
2. 使用 supervisord
第二种方法是使用 supervisord 这个进程管理工具,然后在 Dockerfile 里面定义
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord"]