Docker:如何在启动后保持Ubuntu容器运行?

4
我尝试使用ubuntu镜像启动一个docker容器:
docker container run -d --name ubuntu_assignment_4 6e4f1fe62

然而,一旦我启动容器,它就会立即停止。
为什么会这样发生,我该如何确保容器保持运行状态?
我正在尝试运行的镜像是:ubuntu:14.04

需要查看您的Dockerfile,但很可能您的入口点正在返回。 Docker容器只在入口点任务活动期间运行。一旦该任务完成并返回,容器将停止运行。 - Z4-tier
在这种情况下,我要运行的镜像是:ubuntu:14.04 ,我将编辑问题以明确这一点。 - java12399900
必须有一个 Dockerfile 指定 CMDENTRYPOINT 指令。 - Z4-tier
你在运行Ubuntu容器的目的是什么? - franklinsijo
@franklinsijo 我想要执行一个“容器 exec”命令来进入容器内部并检查容器内安装的curl版本。 - java12399900
您只能在正在运行的容器上执行命令。由于没有任何东西可以使其保持运行状态,因此您可以按需交互式地运行容器。 - franklinsijo
2个回答

4

如果你不需要对ubuntu:14.04镜像进行任何修改,那么你不需要使用单独的Dockerfile文件。但是无法将纯净的ubuntu:14.04镜像作为容器运行。

可以直接使用ubuntu:14.04镜像启动一个交互式的Shell来启动容器。

docker run -it ubuntu:14.04 /bin/bash

但是普通的 ubuntu:14.04 镜像没有预装 curl

您需要使用自定义的 Dockerfile 来解决此问题。


0

如果没有看到用于构建镜像的完整Dockerfile,我无法确定发生了什么,但我非常确定您遇到的问题只是由于容器内部启动的任何任务正在完成并退出。

Docker容器通过分配一些命令(使用Dockerfile中的ENTRYPOINT或CMD指令,或作为docker start或docker 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命令的镜像。 - java12399900
ubuntu:14.04 不是 Dockerfile,而是一个镜像。仅仅运行这个镜像本身并不能做太多事情。你需要了解 Dockerfile,它们是什么以及如何使用它们来创建新的镜像(因为要让 Docker 做任何有用的事情,你需要使用自己的 Dockerfile 来构建一个新的镜像,并且你可以使用 ubuntu:14.04 作为起点)。 - Z4-tier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接