如何重新启动已停止的Docker容器


89

我使用以下命令从映像启动docker容器:

$ docker run -d myimage /bin/bash -c "mycommand"

"mycommand"完成后,容器停止(我想这已停止),但它并没有被删除,因为我可以用这个命令来查看它:

$ docker ps -a

有什么办法可以restart使用相同的参数将此容器保持由生成的数据mycommand


“卷”或“安装主机目录”是否使您满意?就像提到的文档一样:docs.docker.com/engine/tutorials/dockervolumes
Zhang

Answers:


123

是的,当初始命令完成执行后,容器将停止。

您可以使用以下方法启动已停止的容器:

docker start container_name

如果要查看命令的输出,则应添加-ai选项:

docker start -ai container_name

PS。有一个,docker restart container_name但是用于重新启动正在运行的容器-我相信情况并非如此。


1
每次启动后,我的容器都会立即停止。不知道那是什么意思。使用-ai命令给出这样的响应:无法打开需求文件:[错误2]没有这样的文件或目录:“requirements.txt”
geoidesic

@geoidesic您能否提供更多详细信息?您正在谈论哪种“ requirements.txt”文件?
lmtx

1
@geoidesic,要解决此问题,我将入口点更改为仅运行sleep 900命令,该命令使我可以连接到容器并使用来运行其中的命令docker exec -it container_name bash。当我从容器内部运行命令时,我可以看到为什么脚本的初始实现失败并进行了修复。
PatS

@PatS可以请你分享如何结合start使用sleep?我无法跑步exec
3pitt

9

首先,$ docker ps -a显示所有容器(正在运行的容器和已停止的容器),因此这就是您未看到列出的已停止容器的原因。

其次,您可以轻松启动已停止的容器运行:

$ docker start container_name

启动容器后,可以通过以下方式运行命令:

$ docker exec -it container_name bash -c "mycommand"

您在容器中创建的内容将一直存在于容器中。如果即使删除了容器也要保留数据,则可以使用


1

它应该是

$ docker restart container_id # OR
$ docker restart container_name

公认的答案restart是针对已经运行的容器
3pitt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.