根据我目前阅读的教程,使用"docker run -d"将从image启动一个容器,并且容器将在后台运行。这就是它的样子,我们已经有了container 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

我做错什么了吗?如何解决此问题?


当前回答

根据这个答案,添加-t标志将防止容器在后台运行时退出。然后使用docker exec -i -t <image> /bin/bash进入shell提示符。

docker run -t -d <image> <command>

-t选项似乎没有很好地记录,尽管帮助说它“分配了一个伪tty”。

其他回答

你可以通过以下任何一种方式实现你想要的:

docker run -t -d <image-name>

or

docker run -i -d <image-name>

or

docker run -it -d <image-name>

其他答案所建议的命令参数(即tail -f /dev/null)是完全可选的,并不是让容器保持在后台运行所必需的。

还要注意Docker文档建议组合-i和-t选项会导致它像shell一样运行。

See:

https://docs.docker.com/engine/reference/run/#foreground

我也遇到了同样的问题,只是打开另一个终端,对我来说很管用:

创建容器:

docker run -d mcr.microsoft.com/mssql/server:2019-CTP3.0-ubuntu
containerid=52bbc9b30557

启动容器:

docker start 52bbc9b30557

启动bash以保持容器运行:

docker exec -it 52bbc9b30557 bash

启动流程您需要:

docker exec -it 52bbc9b30557 /path_to_cool_your_app

Dockerfile中应用程序的错误路径:

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

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

第一停靠港:

docker logs <containerID>

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

line 0: /sbin/postfix: not found

好吧,这告诉了我事情是如何被破坏的,但没有具体到哪里:我仍然需要在Alpine Linux中为二进制文件提供正确的路径……

故障排除:

谷歌没有显示它的正确路径,所以我添加了以下一行到我的Dockerfile:

RUN which postfix

然后,我检查了我的构建日志记录(由附加到构建命令的下面命令提供),以检索RUN的值

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

解决办法:

我删除了这个测试构建,在Dockerfile中提供了正确的路径- /usr/sbin/postfix -到CMD,删除了该后缀的RUN,并运行了另一个构建。

瞧;这个过程现在还没有结束。

所以duff路径导致容器立即退出…

如果里面的任务完成了,Docker容器就会退出,所以如果你想让它存活,即使它没有任何任务或者已经完成了任务,你可以执行Docker run -di image。当你执行docker container ls后,你会看到它正在运行。

你可以简单地使用:

docker container run -d -it <container name or id> /bin/bash