如何重新启动一个现有的Docker容器在重启=“一直”模式?
当您最初从映像运行Docker容器时,您可以指定以下选项:
--restart="always"
这确保了容器总是由Docker守护进程重新启动,如果由于某种原因停止。 所以你可以像这样运行一个容器:
docker run --restart="always" <IMAGE>
您也可以通过指定其容器ID来重新启动现有的Docker容器,即:
docker start <CONTAINER ID>
然而,我不能确定是否有可能改变一个现有的容器,原来不是用--restart="always
选项运行的,将它转换为总是在以后重新启动。
目前唯一可以这样做的方法是将容器保存为新图像,然后使用--restart="always"
选项将该图像作为新容器运行。 这实际上是否是这样做的正确方法?
编辑 :我可能没有足够清楚,原来是我正在考虑的情况下,在容器已经发生了变化,因为它是最初运行,这需要坚持下去。 所以从原始图像只运行一个新的容器是不够的。
我们现在有docker 更新 ,它允许更改正在运行的容器的重新启动策略。
docker update --restart=always <CONTAINER ID>
还有三个选项:
- 否(默认)
- 在故障
- 除非,停止
详情请参阅链接 。
好的,所以要回答我自己的问题,似乎不可能只用--restart=always
重新启动同一个容器,因为这是第一次运行容器时必须执行的操作,而不是一个参数当你启动一个现有的容器时可以使用。
有三种可能的解决方法:
- 正如@ user2915097所述,您可以放弃原始容器(停下来然后用
docker rm <CONTAINER ID>
删除它来清理)。 然后从这个原始映像中运行一个新的容器,这次指定-restart=always
选项。 -
如果没有卷被使用,所以更改是容器的内部,您需要提交容器到一个新的图像,然后从该图像运行一个新的容器。
docker commit <CONTAINER ID> <NEW IMAGE NAME>
docker run -d --restart=always ... <NEW IMAGE NAME>
-
如果使用了卷,并且所有更改都仅限于卷,则可以使用
--volumes-from
参数运行另一个容器,而不必提交新版本的映像。 即-
docker stop <CONTAINER 1 NAME>
-
docker run -d --restart=always --volumes-from <CONTAINER 1 NAME> ... <ORIGINAL IMAGE NAME>
因此删除容器1将是安全的,因为在另一个容器继续使用容器时不会删除容器。
-
我想也有第四种可能性。 如果您使用了卷, 并且您知道卷上没有容器的更改,则必须使用(2)和(3)的组合。
更新:这工作启用重启。 但是将其设置为no,并且将其重置为始终,并且容器再次启动! :(我要在这里留下这个答案,以防有人知道这是如何工作的,我必须靠近!
伙计们,我发现了最复杂的解决scheme,绕过复制容器等
vi / var / lib / docker / containers / $(docker inspect -f'{{.Id}}'$ ContainerID)/hostconfig.json
search“RestartPolicy”。 设置为“否”,“一直”等
也许有人可以用脚本包装起来!
无论如何,这个json和config.json一起允许你修改创build容器时错过的各种东西。
所以假设你想把这个容器的重启策略从始终改变为失败。 要做到这一点,你需要停止容器,删除它,并重新运行新的重新启动策略。