Skip to content

容器自动退出问题

容器自动退出问题

  • what: 容器自动退出问题
  • where: centos7
  • when: 2022.3.29
  • who: jrt
  • why: 记录
  • how:

方法1:

在文件最后添加如下,保证执行完转换命令,服务终止后容器不退出,在重新构建镜像。

while :; do
sleep 300
done
1641796113618

方法2:

在dockerfile中增加CMD [" &"],就是构建镜像时cmd会把 &后台执行 传递给entrypoint,使其后台执行

知识扩展

解决思路

容器如果执行完命令就自动退出(一般来说我们写的shell脚本不会去处理信号,系统不会把命令转化为进程),主要思路是给容器一个永远也无法完成的任务

参考链接

https://blog.csdn.net/zhuchunyan_aijia/article/details/81143481?utm_source=blogxgwz1
https://www.cnblogs.com/shaoyang0123/p/13336708.html
libreoffice是否有类似后台执行的命令
经过查找,启动是命令后加&保持后台执行,容器不退出
soffice -headless -accept=“socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard &
entrypoint.sh脚本中exec "$@"含义
这个命令的意义在于你已经为你的镜像预想到了应该有的调用情况,当实际使用镜像的人执行了你没有预料到的可执行命令时, 将会走到脚本的这最后一行, 去执行用户新的可执行命令。

exec是在当前进程空间执行新的程序,因为docker容器的主进程非常重要,比如一些docker stop/restart等生命周期管理的命令会向它发送信号,所以需要使用当前主进程执行程序,一般来说我们写的shell脚本不会去处理信号,所以要替换为程序,比如nginx/php-fpm等等. 总结:它基本上接受所有额外的命令行参数,并将它们作为命令执行。目的基本上是“在此.sh脚本中执行所有操作,然后在同一shell中运行用户在命令行中传递的命令”。
总结:exec "$@"就是docker的CMD