【问题标题】:How do you start a Docker-ubuntu container into bash?如何在 bash 中启动 Docker-ubuntu 容器?
【发布时间】:2017-09-11 04:24:18
【问题描述】:

this question 的答案无效。

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

【问题讨论】:

  • 容器的原始命令是什么?
  • 我通常使用:docker exec -i -t container-name /bin/bash。会不会是你的容器没有/bin/bash
  • 镜像/Dockerfile 是什么?几个可能的原因,如果没有这些信息中的一个/两个,就不可能知道。
  • @Arash 我不能exec 没有容器启动。 @jwodder @johnharris85 我已将该信息添加到我的问题中。谢谢!
  • 所以,编辑告诉我容器运行,什么都不做并且成功退出。你说容器不接受-t 标志,并且你尝试了-it 等的各种组合......我会认为(如果你使用ubuntu 图像)docker run -it ubuntu应该可以正常工作(它在我的系统上)。

标签: bash ubuntu docker


【解决方案1】:

这是一个非常简单的 Dockerfile,其指令为 cmets ...启动它以启动一个正在运行的容器,您可以执行登录到

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

【讨论】:

    【解决方案2】:

    首先,容器不是虚拟机。容器是运行进程的隔离环境。容器的生命周期与在其中运行的进程绑定。当进程退出时,容器也退出了,隔离环境也就没有了。 “附加到容器”或“进入容器”的意思其实是你进入了运行进程的隔离环境,所以如果你的进程已经退出,你的容器也已经退出了,因此attachenter 没有适合您的容器。所以docker attachdocker exec的命令都是针对running容器的。

    当您在Dockerfile 中配置docker run 并内置到docker 映像中时,将启动哪个进程。以图像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再次进入它。

    您也可以参考this link了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 2016-06-14
      • 2021-05-19
      • 2017-05-26
      • 2019-08-14
      • 2016-12-17
      • 2020-07-17
      相关资源
      最近更新 更多