gpt4 book ai didi

Docker 容器不以 ubuntu 镜像开头(docker start)

转载 作者:行者123 更新时间:2023-12-02 20:52:43 25 4
gpt4 key购买 nike

如果我使用 docker container run ubuntu 直接从 Ubuntu 镜像运行容器,我可以使用 docker start <CONTAINER ID> 轻松重启它.但是,我使用 docker run <ID IMAGE> 的图像运行容器,一旦我退出伪终端,它就完全丢失了。
我注意到每次尝试重新启动它时状态都会更新,这意味着主进程启动并立即停止。
任何的想法?

portaivan@training-vm:~$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d70eaf7277ea 8 days ago 72.9MB
portaivan@training-vm:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4004895feff9 d70eaf7277ea "/bin/bash" 3 hours ago Exited (0) 3 hours ago heuristic_lovelace
3b1b521d62aa ubuntu "/bin/bash" 3 hours ago Exited (0) 23 seconds ago sleepy_pike
portaivan@training-vm:~$ docker start 3b1b521d62aa
3b1b521d62aa
portaivan@training-vm:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4004895feff9 d70eaf7277ea "/bin/bash" 3 hours ago Exited (0) 3 hours ago heuristic_lovelace
3b1b521d62aa ubuntu "/bin/bash" 3 hours ago Up 2 seconds sleepy_pike
portaivan@training-vm:~$ docker container start 4004895feff9
4004895feff9
portaivan@training-vm:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4004895feff9 d70eaf7277ea "/bin/bash" 3 hours ago Exited (0) 2 seconds ago heuristic_lovelace
3b1b521d62aa ubuntu "/bin/bash" 3 hours ago Up 17 seconds sleepy_pike
portaivan@training-vm:~$ docker container start -i 4004895feff9
portaivan@training-vm:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4004895feff9 d70eaf7277ea "/bin/bash" 3 hours ago Exited (0) 2 seconds ago heuristic_lovelace
3b1b521d62aa ubuntu "/bin/bash" 3 hours ago Up 28 seconds sleepy_pike

最佳答案

Docker 容器在命令运行时存在。
你的命令是"/bin/bash" .
那就是

pseudo-terminal


因此,当您关闭终端命令(又名容器入口点)时,容器会停止。
  • 编辑 1. 细微差别解释

  • 如果您在没有 -it 的情况下运行容器您在不创建 session 的情况下启动 bash 的参数(伪 tty)。
    例如,您可以运行:
    bash -c "echo 'blabla'"
    bash 只是运行 echo命令和结束进程。
    因此,容器未退出的原因有两个:
  • 如果你运行
  • docker container run -t --name u_container ubuntu
    您将无法在容器内输入任何命令。因为没有附加 STDIN。但!您通过 -t 创建伪 tty参数和 docker 容器可以在不退出的情况下启动。
  • 只有 -i参数bash不要创建 tty 并希望尽快死亡。但! docker 让容器运行并尝试无限地传递输入,即使您没有附加到容器(请参阅帮助)。虽然我们可以停止bash插入 exit .
  • -i, --interactive Keep STDIN open even if not attached
    所以,简单的解释:这取决于你如何运行 shell。作为循环和监听伪终端或只是作为命令解释器。
    您可以将其与 python 进行比较。
    如果你运行 python ,它将是python shell。如果你运行 python /script/script.py , python 只执行 script.py并停止。

    关于Docker 容器不以 ubuntu 镜像开头(docker start),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64627928/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com