创建 docker 镜像时为了防止结束,运行 sleep infinity 和 tail -f /dev/null 哪个更好

2025 年 12 月 22 日
 movq
1720 次点击
所在节点    Docker
5 条回复
guanzhangzhang
2025 年 12 月 22 日
挂载下/pause 二进制进去执行,不吃 cpu 。如果是为了运行开源项目的 daemon 进程,找下它的--no-daemon 选项成为 pid 为 1 的进程
pckillers
2025 年 12 月 22 日
pid=1 的进程可以自动守护重启。设置给空转有点奢侈了。
liyanggyang
2025 年 12 月 22 日
sleep infinity 专门为休眠设计的,语义清晰,但是 docker 不太友好,因为某些基础镜像(特别是 Alpine )的 busybox sleep 不支持 infinity 参数。

更推荐使用 init 系统或 supervisor 管理进程。

FROM alpine:latest
RUN apk add --no-cache tini
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["sh", "-c", "trap 'exit 0' TERM INT; while true; do sleep 1; done"]
julyclyde
2025 年 12 月 22 日
应该把实际干活的进程作为 1 号
nuII
2025 年 12 月 22 日
如果你的镜像是为了运行某个程序,直接 cmd 里写这个程序的启动命令就行了,pid=1 ,容器的生命周期由进程状态决定,更好管理和发现异常,容器停了说明程序也停了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1180420

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX