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

怎么启动一个不会自动退出的 docker?

  •  
  •   fstar · 2022-03-31 10:47:45 +08:00 · 4082 次点击
    这是一个创建于 970 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我最近在学 docker ,想运行个 linux 的容器耍耍。

    发现 Dockerfile 里不给它整个持续运行的命令,它就自动退出了。

    各位有什么办法让它常驻吗?

    25 条回复    2022-03-31 22:30:54 +08:00
    Orenoid
        1
    Orenoid  
       2022-03-31 10:51:43 +08:00   ❤️ 1
    number
        2
    number  
       2022-03-31 10:55:41 +08:00
    启动个 sshd 服务
    bootvue
        3
    bootvue  
       2022-03-31 11:04:25 +08:00   ❤️ 3
    tail -f /dev/null
    hzfyjgw
        4
    hzfyjgw  
       2022-03-31 11:17:23 +08:00
    运行一个实际对外 提供服务的 docker 容器,比如 nginx 之类的
    lululau
        5
    lululau  
       2022-03-31 11:34:37 +08:00
    tail -f /dev/null 这个比 while true; do sleep; done 好 👍
    xu45525584
        6
    xu45525584  
       2022-03-31 11:44:47 +08:00
    在 docker 里跑 pm2 ? 或者 nginx
    xiaoz
        7
    xiaoz  
       2022-03-31 11:47:05 +08:00 via Android
    看你容器里面运行的什么程序,部分程序支持前台运行的。不支持的可以用楼上的 tail -f
    plko345
        8
    plko345  
       2022-03-31 12:07:36 +08:00 via Android   ❤️ 1
    cat 就行吧
    ksc010
        9
    ksc010  
       2022-03-31 12:15:49 +08:00
    只要入口程序 不退出 容器也不会关闭
    这个最好是结合你实际情况 若你只是想 临时测试啥的 可以 用 sleep 100000
    若跑自己写的程序, 也可跑 supervisor 这样 通过 supervisor 管理的你程序的重启关闭,且不会导致容器关闭
    vuevue
        10
    vuevue  
       2022-03-31 12:30:21 +08:00 via iPhone   ❤️ 1
    —restart=always
    Tink
        11
    Tink  
       2022-03-31 12:46:21 +08:00 via Android
    随便起一个服务
    cjpjxjx
        12
    cjpjxjx  
       2022-03-31 12:55:14 +08:00
    我一般用 ping 127.0.0.1 命令
    tylinux
        13
    tylinux  
       2022-03-31 13:14:26 +08:00
    这题我会:docker container run -it xxx /bin/sh ,如果要 daemon 运行就在加个 -d
    boris93
        14
    boris93  
       2022-03-31 14:09:41 +08:00 via iPhone   ❤️ 1
    @vuevue #10 这么做的现象会是这个容器反复启动和停止
    sanwe
        15
    sanwe  
       2022-03-31 14:19:22 +08:00
    好奇你跑的什么东西会自动退出
    CEBBCAT
        16
    CEBBCAT  
       2022-03-31 14:27:20 +08:00   ❤️ 1
    搞不懂楼主想问什么,发帖前阅读文档了吗?

    docker run --name myAlpine -itd alpine
    docker exec -it myAlpine sh
    d5
        17
    d5  
       2022-03-31 14:31:53 +08:00
    cat 就行
    segama201901
        18
    segama201901  
       2022-03-31 14:37:43 +08:00
    只要容器内 PID1 进程不退出,容器会一直保持运行,一楼链接内例子很全。但是,尽量遵守 one container one process 原则。参考 https://devops.stackexchange.com/questions/447/why-it-is-recommended-to-run-only-one-process-in-a-container
    bomb77
        19
    bomb77  
       2022-03-31 14:41:47 +08:00
    @vuevue #10 你确定不加个狗头保命吗?
    sadfQED2
        20
    sadfQED2  
       2022-03-31 15:31:36 +08:00 via Android
    CMD /bin/bash
    vuevue
        21
    vuevue  
       2022-03-31 16:06:33 +08:00 via iPhone
    @bomb77 🙈确实一直运行呀
    szyp
        22
    szyp  
       2022-03-31 18:42:07 +08:00
    top 就好了啊
    SbloodyS
        23
    SbloodyS  
       2022-03-31 18:46:17 +08:00
    jfdnet
        24
    jfdnet  
       2022-03-31 20:16:53 +08:00   ❤️ 1
    @vuevue

    --restart unless-stopped

    🐶
    fstar
        25
    fstar  
    OP
       2022-03-31 22:30:54 +08:00
    CMD /bin/sh 配合 -td 可以让容器持续运行,不是很懂为什么。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2586 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:44 · PVG 23:44 · LAX 07:44 · JFK 10:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.