【问题标题】:Docker: Keep Ubuntu container running after starting?Docker:启动后保持 Ubuntu 容器运行?
【发布时间】:2020-07-17 11:51:31
【问题描述】:

我正在尝试使用ubuntu 图像启动docker container

docker container run -d --name ubuntu_assignment_4 6e4f1fe62

但是,一旦我启动容器,它就会再次停止。

为什么会发生这种情况,如何确保容器保持运行?

我试图在这里运行的图像是:ubuntu:14.04

【问题讨论】:

  • 需要查看您的 Dockerfile,但您的入口点可能正在返回。只要入口点任务处于活动状态,Docker 容器就会运行。一旦该任务完成并返回,容器就会停止。
  • 在这种情况下,我要运行的图像是: ubuntu:14.04 ,我将编辑问题以使其清楚
  • 必须有一个指定CMDENTRYPOINT指令的Dockerfile。
  • 你运行 ubuntu 容器的目的是什么?
  • @franklinsijo 我想然后做一个“容器执行”来在其中获取一个 bash shell 并检查容器上安装了哪个版本的 curl

标签: docker containers ubuntu-14.04 docker-image


【解决方案1】:

如果您要使用ubuntu:14.04 图像而不对其进行任何修改,则不需要单独的Dockerfile。并且不可能保持普通的ubuntu:14.04 图像作为容器运行。

您可以使用ubuntu:14.04 图像直接通过交互式外壳启动容器。

docker run -it ubuntu:14.04 /bin/bash

但普通的ubuntu:14.04 图像上没有预装curl

为此,您需要一个自定义的Dockerfile

【讨论】:

    【解决方案2】:

    如果没有看到用于构建映像的完整 Dockerfile,我无法准确说出发生了什么,但我很确定您遇到的问题仅仅是因为容器内正在启动的任何任务正在完成并退出。

    Docker 容器通过分配一些命令来工作(在 Dockerfile 中使用 ENTRYPOINTCMD 指令,或在命令行上作为 docker startdocker run 的参数),这是在何时启动的程序集装箱装载。只要该任务继续运行,容器就会一直存在,一旦该程序完成,容器就会终止。

    要在命令行指定启动入口点,请尝试:

    docker create -it [image] /bin/bash
    

    然后像这样开始:

     docker start -ia [Container ID]
    

    一旦 shell 退出,容器就会退出,因为这是将 shell 指定为入口点。

    cURL 默认可能不会安装。可以使用apt-get 安装它。但同样,一旦 shell 关闭,容器将停止,任何更改都将丢失。首先,尝试在某处创建一个新目录,然后添加一个名为 Dockerfile 的文件,其中包含以下内容:

    FROM ubuntu:latest
    RUN  apt-get update && apt-get install -y curl
    ENTRYPOINT ["/bin/bash"]
    

    这将创建一个安装了 curl 的新图像。然后,在创建 Dockerfile 的新目录中,使用:

    docker build .
    docker images
    

    这将使用 Dockerfile 作为蓝图来构建一个新镜像。 构建完成后,找到新容器的镜像 ID,并使用以下命令运行它:

    docker run -it [image id]
    

    最终,要使 Docker 真正有用,典型的方法是用将永远继续运行的内容(如 ENTRYPOINT ["apache2"]ENTRYPOINT ["redis"] 或类似)替换 Dockerfile 中的最后一行 (ENTRYPOINT ["command"])。如果您有使用常规桌面/服务器操作系统安装和完整虚拟机(如 VMWare 或 VirtualBox)的经验,请记住 Docker 是非常不同的;它的工作方式和用于部署它的模式并不相同。

    【讨论】:

    • 谢谢,在这种情况下,docker 文件将是 ubuntu:14.04 docker 文件作为参考,因为这是我拉取的图像,对应于:我的命令中的 6e4f1fe62
    • ubuntu:14.04 不是 Dockerfile,它是一个镜像。仅仅运行这个图像本身不会有太大的作用。您需要了解 Dockerfiles,它们是什么以及如何使用它们来创建新镜像(因为要让 docker 做任何有用的事情,您需要使用自己的 Dockerfile 来构建新镜像,并且可以使用 ubuntu:14.04 作为起点)。
    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多