![](/img/trans.png)
[英]How to start cron plus a shelll script in an Ubuntu Docker container
[英]How do you start a Docker-ubuntu container into bash?
这个问题的答案不起作用。
docker 容器总是在我可以attach
或不接受-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
首先,容器不是虚拟机。 容器是运行进程的隔离环境。 容器的生命周期与其内部运行的进程绑定在一起。 当进程退出时,容器也退出,隔离环境就没了。 “attach to container”或者“enter an container”的意思其实就是进入到正在运行的进程的隔离环境里面,所以如果你的进程已经退出了,你的容器也已经退出了,这样就没有你可以attach
容器了或enter
. 所以docker attach
, docker exec
的命令是运行容器的目标。
当你哪个流程将启动docker run
在一个配置Dockerfile
并建成一个码头工人的形象。 以镜像ubuntu
为例,如果你运行docker inspect ubuntu
,你会在输出中找到以下配置:
"Cmd": ["/bin/bash"]
这意味着当您运行docker run ubuntu
时该进程已启动/bin/bash
,但您未处于交互模式且未为其分配 tty,因此该进程立即退出并且容器退出。 这就是为什么您无法再次进入容器的原因。
要启动容器并输入bash
,请尝试:
docker run -it ubuntu
然后您将被带入容器外壳。 如果你打开另一个终端和docker ps
,你会发现容器正在运行,你可以docker attach
到它或者docker exec -it <container_id> bash
再次输入它。
您也可以参考此链接了解更多信息。
这是一个非常简单的 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
#
一个容器在没有工作要做时会正常退出......如果你不给它任何工作,它会因为这个原因在启动时立即退出......通常你的 Dockerfile 的最后一个命令是执行某种风格的服务器由于内部事件循环而保持活动状态,并且这样做使其封闭容器保持活动状态......除此之外,您可以提及已安装到容器中的服务器可执行文件作为您调用的最终参数
docker run -d my-image-name my-server-executable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.