根据我目前阅读的教程,使用"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

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


当前回答

我有这段代码片段从我的docker文件中的ENTRYPOINT运行:

while true
do
    echo "Press [CTRL+C] to stop.."
    sleep 1
done

运行构建的docker映像:

docker run -td <image name>

登录容器外壳:

docker exec -it <container id> /bin/bash

其他回答

我已经在下面的帖子中解释了这个问题。

使用“exit”后如何保留docker alpine容器?

你可以简单地使用:

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

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

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

这4个命令都可以保持docker容器的运行:

docker run -td centos
docker run -dt centos
docker run -t -d centos
docker run -d -t centos

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

创建容器:

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