考虑:

docker run -it centos /bin/bash

我按Ctrl+D退出。

我想继续运行这个容器,但我发现我做不到。

唯一的方法是

docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash

我说的对吗?有没有更好的方法?(我使用docker 0.8.0。)


当前回答

在我的例子中,当我启动docker容器时,它干净地退出了,所以上面的方法都不起作用。我需要的是一种改变要运行的命令的方法。

使用docker-compose,我可以通过运行以下命令来更改命令:

docker-compose run <container name in docker-compose.yml> bash

e.g.

docker-compose run app bash

注意!这实际上是重新创建容器,因此它不会在前一个实例上运行。

其他回答

对于那些在2021年及以后来到这里的人来说,下面的命令将完成接受的答案将在一行中完成的工作。

$ docker start -ai $(docker ps -q -l)

这些命令适用于任何容器(不仅仅是最后退出的容器)。 这种方法即使在系统重新启动后也可以工作。 为此,这些命令将使用“容器id”。

步骤:

使用此命令列出所有docker,并注意要重启的容器的容器id: Docker ps a 使用容器id启动容器: Docker start <container_id> 附加并运行容器: Docker attach <container_id>

注意:适用于linux

docker start `docker ps -a | awk '{print $1}'`

这将启动所有处于“已退出”状态的容器

如果你只想启动一个状态为“Exited”的容器,只需输入:

sudo docker start container_name

没有sudo。查看更多

docker start container_name

如果容器名称不起作用,则将名称替换为容器id

如果你想在多个易于记忆的命令中完成:

列出停止的容器:

Docker ps a

复制你想要附加的容器的名称或容器id,并以以下方式开始容器:

Docker start -i <name/id> .使用实例

-i标志告诉docker附加到容器的stdin。

如果容器开始时没有连接到一个交互式shell,你需要这样做来运行一个shell:

docker start <name/id>
docker exec -it <name/id> /bin/sh

/bin/sh是通常可用于基于alpine的映像的shell。