根据我目前阅读的教程,使用"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容器时。它会自动停止正在后台运行的未使用的容器。有时它还会停止正在使用的容器。 在我的情况下,这是因为docker的许可。Sock文件,它早先有。 你要做的是:-

Install docker again.(As i work on ubuntu i install it from here) Run the command to change the permissions. sudo chmod 666 /var/run/docker.sock Install docker-compose (this is optional as I have compose file to create many containers together) sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose check for the version to ensure that I have the latest one and not get problem with some deprications. Then I run the docker container build.

其他回答

我有这段代码片段从我的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

如果你在Dockerfile的末尾使用CMD,你所能做的就是在末尾添加代码。只有当你的docker构建在ubuntu上,或者任何可以使用bash的操作系统上时,这才会起作用。

&& /bin/bash

简单地说,Dockerfile的结尾看起来像这样。

...

CMD ls && ... && /bin/bash

因此,如果您在运行docker映像后自动运行任何内容,并且当任务完成时,bash终端将在docker中处于活动状态。因此,您可以输入shell命令。

在前台/分离状态下运行容器有多个选项。但是,如果您仍然觉得问题没有解决,您可以尝试通过查看日志来解决问题。

Sudo docker logs -f >> container.log

此外,您还可以使用——details来显示提供给日志的额外详细信息。

在交互模式下运行docker可能会解决这个问题。

下面是使用和不使用交互模式运行映像的示例

chaitra@RSK-IND-BLR-L06:~/dockers$ sudo docker运行-d -t -i test_again1.0 b6b9a942a79b1243bada59db19c7999cfff52d0a8744542fa843c95354966a18

chaitra@RSK-IND-BLR-L06:~/dockers$ sudo docker ps

容器id镜像命令创建状态端口名称

chaitra@RSK-IND-BLR-L06:~/dockers$ sudo docker run -d -t -i test_again1.0 bash c3d6a9529fd70c5b2dc2d7e90fe662d19c6dad8549e9c812fb2b7ce2105d7ff5

chaitra@RSK-IND-BLR-L06:~/dockers$ sudo docker ps

容器id镜像命令创建状态端口名称 “bash”2 seconds ago Up 1秒

执行命令如下:

docker run -t -d <image-name>

如果你想指定端口,那么命令如下:

docker run -t -d -p <port-no> <image-name>

使用以下命令验证正在运行的容器:

docker ps