Docker容器在运行"docker run -d"命令后会自动停止

562

根据我迄今为止阅读的教程,使用"docker run -d"将启动一个容器从镜像中,并且该容器将在后台运行。它看起来像这样,我们可以看到我们已经有了容器ID。

root@docker:/home/root# docker run -d centos
605e3928cdddb844526bab691af51d0c9262e0a1fc3d41de3f59be1a58e1bd1d

但如果我运行"docker ps",没有任何返回。

所以我尝试运行"docker ps -a",我可以看到容器已经退出:

root@docker:/home/root# docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS                         PORTS               NAMES
605e3928cddd        centos:latest         "/bin/bash"         31 minutes ago      Exited (0) 31 minutes ago                          kickass_swartz

我有做错什么吗?如何排除这个问题?


2
"docker run hello-world" <== 运行正常,但如果我运行 "docker run -d hello-world",我仍然无法获得正在运行的容器。 - J John
9
我之前也遇到了类似的问题,但是我通过使用 docker run -it -d <image> /bin/bash 解决了它。这个命令会启动一个交互式的bash shell,并且不会关闭容器,因为bash shell进程在活动状态。 - Rtsne42
23个回答

-1

Dockerfile中应用程序路径不正确:

我正在使用Alpine Linux将一个应用程序从RHEL服务器迁移到Docker容器中。

构建过程中没有出现任何错误,所以我很惊讶看到容器立即退出!

首先检查的是:

docker logs <containerID>

这揭示了我在Dockerfile中提供给CMD的二进制文件路径是虚假的:

line 0: /sbin/postfix: not found

这告诉了我问题出在哪里,但并没有具体说明路径:我仍然需要正确的路径才能在Alpine Linux中使用二进制文件...

故障排除:

通过谷歌搜索无法找到正确的路径,因此我在Dockerfile中添加了以下行:

RUN which postfix

然后我查看了我的构建日志 - 通过在我的构建命令后加入以下命令提供 - 以检索后缀为RUN which postfix的值

 --progress=plain > /path/to/build.log 2>&1

解决方法:

我删除了这个测试版本,将正确路径 /usr/sbin/postfix 提供给 Dockerfile 中的 CMD,删除了 RUN which postfix 并运行了另一个构建。

瞧!进程现在一直保持着运行状态。

所以,错误的路径导致容器立即退出...


-2

这4个命令都可以让你的Docker容器保持运行状态:

docker run -td centos

docker run -dt centos

docker run -t -d centos

docker run -d -t centos

-3
首先,您需要检查是否有任何容器正在运行 输入以下命令,

docker ps -all

如果有任何容器正在运行,则停止它们 输入以下命令,

docker stop 容器ID

现在,最后通过以下命令运行Docker...........

docker run -t -p 2020:3000 Docker镜像名称

因此,打开您的Google Chrome并访问localhost:2020 恭喜 :)

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