Docker容器重启慢?快来看看这些优雅终止方案(1),看完99%的人都学会了
2021/9/11 23:07:25
本文主要是介绍Docker容器重启慢?快来看看这些优雅终止方案(1),看完99%的人都学会了,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
2. 容器进程收不到 SIGTERM 信号?
如果容器中的进程没有收到 SIGTERM
信号,很有可能是因为应用进程不是 PID 1
,PID 1 是 shell
,而应用进程只是 shell
的子进程。而 shell 不具备 init
系统的功能,也就不会将操作系统的信号转发到子进程上,这也是容器中的应用没有收到 SIGTERM
信号的常见原因。
问题的根源就来自 Dockerfile
,例如:
FROM alpine:3.7 COPY popcorn.sh . RUN chmod +x popcorn.sh ENTRYPOINT ./popcorn.sh
ENTRYPOINT
指令使用的是 shell 模式,这样 Docker 就会把应用放到 shell
中运行,因此 shell
是 PID 1。
解决方案有以下几种:
方案 1:使用 exec 模式的 ENTRYPOINT 指令
与其使用 shell 模式,不如使用 exec 模式,例如:
FROM alpine:3.7 COPY popcorn.sh . RUN chmod +x popcorn.sh ENTRYPOINT ["./popcorn.sh"]
这样 PID 1 就是 ./popcorn.sh
,它将负责响应所有发送到容器的信号,至于 ./popcorn.sh
是否真的能捕捉到系统信号,那是另一回事。
举个例子,假设使用上面的 Dockerfile 来构建镜像,popcorn.sh
脚本每过一秒打印一次日期:
#!/bin/sh while true do date sleep 1 done
构建镜像并创建容器:
这篇关于Docker容器重启慢?快来看看这些优雅终止方案(1),看完99%的人都学会了的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Docker部署资料:新手入门教程
- 2024-12-19Docker部署实战:新手入门教程
- 2024-12-19Docker部署教程:新手入门详解
- 2024-12-09云原生周刊:在Docker上部署大语言模型
- 2024-12-05Docker教程:新手快速入门指南
- 2024-12-05Docker项目实战:新手教程与案例解析
- 2024-12-04Docker入门教程:快速掌握基础操作
- 2024-12-04Docker入门教程:轻松搭建你的第一个容器化应用
- 2024-12-04Docker-Compose 入门教程:全面解析基础命令与应用场景
- 2024-12-04Docker入门:新手必读的简单教程