原创内容,禁止转载.
容器运行启动主要依靠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"]