this question的答案不起作用。
我可以在attach
之前退出Docker容器,或者不接受-t
标志。我可以列出我尝试过的所有命令,但它是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
答案 0 :(得分:16)
首先,容器不是虚拟机,容器是运行进程的隔离环境,容器的生命周期绑定到内部运行的进程,当进程退出时,容器也退出,隔离环境消失了。 "附加到容器"的含义或者"进入容器"实际上意味着你进入正在运行的进程的隔离环境,所以如果你的进程已经退出,你的容器也已退出,因此你没有{{1}的容器}或attach
。因此,enter
,docker attach
的命令定位于正在运行容器。
在docker exec
中配置docker run
并内置到泊坞窗图片中时,将启动哪个流程。以图像Dockerfile
为例,
如果你运行ubuntu
,你会在输出中找到以下配置:
docker inspect ubuntu
这意味着当您运行"Cmd": ["/bin/bash"]
docker run ubuntu
时,该过程已启动,但您未处于交互模式且未向其分配tty,因此该过程立即退出,容器退出。这就是为什么你无法再次进入容器的原因。
要启动容器并输入/bin/bash
,请尝试:
bash
然后你将被带入容器外壳。如果您打开另一个终端docker run -it ubuntu
,则会发现容器正在运行,您可以docker ps
向它或docker attach
再次输入。
您还可以参考this link了解详情。
答案 1 :(得分:2)
这是一个非常简单的Dockerfile,其中包含说明作为注释...给它一个旋转,看看你是否有一个可以执行登录的工作容器
FROM ubuntu:16.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 3cea1993ed28 bash # login to running container
#
当一个容器无法正常工作时,它将正常退出...如果你没有工作,它将在启动后立即退出...因为通常你的Dockerfile的最后一个命令是执行某种风格的由于内部事件循环而保持活动状态的服务器,这样做可以保持其封闭容器的存在...不过你可以提到服务器可执行文件作为你调用的最后一个参数
docker run -d my-image-name my-server-executable