V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
movq
V2EX  ›  Docker

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

  •  
  •   movq · Dec 22, 2025 · 2088 views
    This topic created in 140 days ago, the information mentioned may be changed or developed.
    5 replies    2025-12-22 22:26:15 +08:00
    guanzhangzhang
        1
    guanzhangzhang  
       Dec 22, 2025
    挂载下/pause 二进制进去执行,不吃 cpu 。如果是为了运行开源项目的 daemon 进程,找下它的--no-daemon 选项成为 pid 为 1 的进程
    pckillers
        2
    pckillers  
       Dec 22, 2025
    pid=1 的进程可以自动守护重启。设置给空转有点奢侈了。
    liyanggyang
        3
    liyanggyang  
       Dec 22, 2025
    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
        4
    julyclyde  
       Dec 22, 2025   ❤️ 1
    应该把实际干活的进程作为 1 号
    nuII
        5
    nuII  
       Dec 22, 2025
    如果你的镜像是为了运行某个程序,直接 cmd 里写这个程序的启动命令就行了,pid=1 ,容器的生命周期由进程状态决定,更好管理和发现异常,容器停了说明程序也停了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1709 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 16:24 · PVG 00:24 · LAX 09:24 · JFK 12:24
    ♥ Do have faith in what you're doing.