V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
movq
V2EX  ›  Docker

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

  •  
  •   movq · 3 天前 · 629 次点击
    5 条回复    2025-12-22 22:26:15 +08:00
    guanzhangzhang
        1
    guanzhangzhang  
       3 天前
    挂载下/pause 二进制进去执行,不吃 cpu 。如果是为了运行开源项目的 daemon 进程,找下它的--no-daemon 选项成为 pid 为 1 的进程
    pckillers
        2
    pckillers  
       3 天前
    pid=1 的进程可以自动守护重启。设置给空转有点奢侈了。
    liyanggyang
        3
    liyanggyang  
       3 天前
    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  
       2 天前   ❤️ 1
    应该把实际干活的进程作为 1 号
    nuII
        5
    nuII  
       2 天前
    如果你的镜像是为了运行某个程序,直接 cmd 里写这个程序的启动命令就行了,pid=1 ,容器的生命周期由进程状态决定,更好管理和发现异常,容器停了说明程序也停了。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   4073 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:11 · PVG 18:11 · LAX 02:11 · JFK 05:11
    ♥ Do have faith in what you're doing.