【问题标题】:How to re-enter to docker containter prompt after exiting退出后如何重新进入docker容器提示
【发布时间】:2018-10-25 02:48:29
【问题描述】:

我在 this procedure 之后运行 docker:

    $ sudo service docker start
    $ docker pull epgg/eg
    $ docker run -p 8081:80 --name eg -it epgg/eg bash
    root@35f54d7d290f:~#

注意在最后一步它会创建一个根提示符root@35f54d7d290f:~#。 当我这样做时

 root@35f54d7d290f:~# exit
 exit

docker 进程结束,容器内的 Apache 死了。 如何安全退出容器,如何重新进入 docker 容器提示返回。

【问题讨论】:

    标签: linux docker unix


    【解决方案1】:

    当您运行以下命令时,它会执行 2 个操作。

    $ docker run -p 8081:80 --name eg -it epgg/eg bash
    
    • 它创建了一个名为 eg 的容器
    • 它只有一个用途/过程 bash 您已使用 cmd 参数覆盖。
      • 这意味着当 bash shell 结束/完成/退出 容器没有运行目标,因此您的 docker 容器也将进入 stopped 阶段。

    理想情况下,您应该创建一个容器来运行 apache-server 作为主进程(默认为入口点或 cmd)。

    $ docker run -p 8081:80 --name eg -d epgg/eg
    

    然后使用下面的命令就可以进入正在运行的容器里面了。

    $ docker exec -it eg bash
    

    这里你的容器名称是例如 (请注意,由于您已经有一个名为“eg”的容器,您可能需要先将其删除)

    $ docker rm -f eg
    

    【讨论】:

    • 我尝试docker run -p 8081:80 --name eg -d epgg/eg成功。但是当我尝试docker exec -it eg bash 时,它给了我Error response from daemon: Container 89d4da88e9ab90d8de9668956b0f4dee1aef21e1a285972e3e0f05519c665f19 is not running
    【解决方案2】:

    由于任何容器的目的是启动/运行任何进程/进程,容器在该进程完成时停止/退出。所以要让容器在后台继续运行,它必须有一个活跃的进程在里面。

    1. 您可以在运行容器时使用 -d 简写来分离 来自终端的容器是这样的:

      docker run -d -it --name {container_name} {image}:{tag}
      

      但这并不能保证在 背景,所以即使在这种情况下,容器也会在 进程结束。

    2. 要在后台主动运行 apache 服务器,您需要使用 -DFOREGROUND 标志同时启动容器:

      /usr/sbin/httpd -DFOREGROUND     (for centOS/RHEL) 
      

      这将在后台运行您的 apache 服务。

    3. 在其他情况下,让您的服务以分离模式运行 只需传递 /bin/bash 命令,这将保留 bash shell 在后台活动。

      docker run -d -it --name {container_name} {image}:{tag} /bin/bash
      

    无论如何,要离开正在运行的容器而不退出容器和进程,只需按:Ctrl+P+Q

    要将容器再次附加到终端,请使用:

    docker attach {container_name}
    

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 2018-01-18
      • 2023-01-13
      • 1970-01-01
      • 2019-07-30
      • 2017-04-14
      • 2017-04-30
      • 2020-01-23
      • 1970-01-01
      相关资源
      最近更新 更多