docker container run -d --name ubuntu_assignment_4 6e4f1fe62
然而,一旦我启动容器,它就会立即停止。
为什么会这样发生,我该如何确保容器保持运行状态?
我正在尝试运行的镜像是:
ubuntu:14.04
。docker container run -d --name ubuntu_assignment_4 6e4f1fe62
ubuntu:14.04
。如果你不需要对ubuntu:14.04
镜像进行任何修改,那么你不需要使用单独的Dockerfile
文件。但是无法将纯净的ubuntu:14.04
镜像作为容器运行。
可以直接使用ubuntu:14.04
镜像启动一个交互式的Shell来启动容器。
docker run -it ubuntu:14.04 /bin/bash
但是普通的 ubuntu:14.04
镜像没有预装 curl
。
您需要使用自定义的 Dockerfile
来解决此问题。
如果没有看到用于构建镜像的完整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非常不同;它的工作方式和部署所使用的模式都不同。
ubuntu:14.04
不是 Dockerfile,而是一个镜像。仅仅运行这个镜像本身并不能做太多事情。你需要了解 Dockerfile,它们是什么以及如何使用它们来创建新的镜像(因为要让 Docker 做任何有用的事情,你需要使用自己的 Dockerfile 来构建一个新的镜像,并且你可以使用 ubuntu:14.04
作为起点)。 - Z4-tier
CMD
或ENTRYPOINT
指令。 - Z4-tier