最初从映像运行Docker容器时,可以指定选项:
--restart="always"
Run Code Online (Sandbox Code Playgroud)
这可确保Docker守护程序始终重新启动容器,如果由于某种原因它停止.所以你可以像这样运行一个容器:
docker run --restart="always" <IMAGE>
Run Code Online (Sandbox Code Playgroud)
您还可以通过指定其容器ID来重新启动现有的Docker容器,即:
docker start <CONTAINER ID>
Run Code Online (Sandbox Code Playgroud)
但是,我无法确定是否可以更改现有容器(最初未使用该--restart="always选项运行),以将其转换为将来始终重新启动.
目前我能想到的唯一方法是将容器保存为新映像,然后将该映像作为带有该--restart="always"选项的新容器运行.这实际上是这样做的正确方法吗?
编辑:我最初可能没有说清楚的是,我正在考虑容器自最初运行以来发生变化的情况,需要持续存在.因此,仅从原始图像运行新容器是不够的.
Fra*_*ong 85
我们现在有docker update,它允许更改正在运行的容器的重启策略.
docker update --restart=always <CONTAINER ID>
Run Code Online (Sandbox Code Playgroud)
还有其他三个选择:
有关详细信息,请参阅链接.
Ric*_*eld 14
好吧,所以要回答我自己的问题,似乎不可能只重新启动同一个容器--restart=always,因为这是你第一次运行容器时必须要做的事情,而不是你开始时可以使用的参数现有的容器.
有三种可能的解决方法:
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)的组合.
| 归档时间: |
|
| 查看次数: |
44665 次 |
| 最近记录: |