你如何在bash中启动Docker-ubuntu容器?

And*_*rew 16 bash ubuntu docker

这个问题的答案不起作用.

在我可以attach或不接受-t标志之前,docker容器总是退出.我可以列出我尝试过的所有命令,但它是start exec attach各种-it标志和组合/bin/bash.

如何将现有容器启动到bash中?为什么这么难?这是Docker的"不正当"使用吗?

编辑:我创建了容器docker run ubuntu.有关容器的信息:60b93bda690f ubuntu "/bin/bash" About an hour ago Exited (0) 50 minutes ago ecstatic_euclid

shi*_*zhz 26

首先,容器不是虚拟机,容器是运行进程的隔离环境,容器的生命周期绑定到进程内部运行,进程退出时,容器也退出,隔离环境离开了."附加到容器"或"输入容器"的含义实际上意味着您进入正在运行的进程的隔离环境,因此如果您的进程已退出,您的容器也已退出,因此没有容器可供您使用attachenter.所以的命令docker attach,docker exec是在目标上运行的容器.

docker runDockerfiledocker镜像中配置并内置到docker镜像时,将启动哪个进程.以图片ubuntu为例,如果你运行docker inspect ubuntu,你会在输出中找到以下配置:

"Cmd": ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)

这意味着当您运行的过程中起步docker run ubuntu/bin/bash,但你在交互模式不是,不分配一个TTY它,所以这个过程会马上退出和容器退出.这就是为什么你无法再次进入容器的原因.

要启动容器并输入bash,只需尝试:

docker run -it ubuntu
Run Code Online (Sandbox Code Playgroud)

然后你将被带入容器壳.如果你打开另一个终端docker ps,你会发现容器正在运行,你可以docker attach使用它或docker exec -it <container_id> bash再次输入它.

您还可以参考此链接以获取更多信息.


Sco*_*and 5

这是一个非常简单的 Dockerfile,带有注释说明......启动它以启动一个正在运行的容器,您可以执行登录

FROM ubuntu:20.04

ENV TERM linux
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get install -y  

CMD ["/bin/bash"]


# ... save this file as Dockerfile then in same dir issue following
#
# docker build --tag stens_ubuntu .   # creates image stens_ubuntu
#
# docker run -d  stens_ubuntu  sleep infinity # launches container 
#
# docker ps     #   show running containers
#
# 
# ... find CONTAINER ID from above and put into something like this
#
# docker exec -ti $( docker ps | grep stens_ubuntu | cut -d' ' -f1 ) bash   #  login to running container
# docker exec -ti 3cea1993ed28 bash   #  login to running container using sample containerId  
#
Run Code Online (Sandbox Code Playgroud)

一个容器在没有工作要做时会正常退出......如果你不给它任何工作,它会因为这个原因在启动时立即退出......通常你的 Dockerfile 的最后一个命令是执行某种风格的服务器由于内部事件循环而保持活动状态,并且这样做使其封闭容器保持活动状态......除此之外,您可以提及已安装到容器中的服务器可执行文件作为您调用的最终参数

docker run -d  my-image-name  my-server-executable
Run Code Online (Sandbox Code Playgroud)