Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在restart=";中重新启动现有Docker容器;“始终”;模式_Docker - Fatal编程技术网

如何在restart=";中重新启动现有Docker容器;“始终”;模式

如何在restart=";中重新启动现有Docker容器;“始终”;模式,docker,Docker,最初从图像运行Docker容器时,可以指定以下选项: --restart="always" 这确保了如果容器由于某种原因停止,Docker守护进程始终会重新启动它。因此,您可以像这样运行容器: docker run --restart="always" <IMAGE> docker run--restart=“始终” 您还可以通过指定现有Docker容器的容器ID重新启动该容器,即: docker start <CONTAINER

最初从图像运行Docker容器时,可以指定以下选项:

--restart="always"
这确保了如果容器由于某种原因停止,Docker守护进程始终会重新启动它。因此,您可以像这样运行容器:

docker run --restart="always" <IMAGE>
docker run--restart=“始终”
您还可以通过指定现有Docker容器的容器ID重新启动该容器,即:

docker start <CONTAINER ID>
docker启动
但是,我无法确定是否可以更改一个现有的容器(该容器最初未使用
--restart=“always”
选项运行),以便将来将其转换为always restart

目前,我能想到的唯一方法是将容器另存为新映像,然后使用
--restart=“always”
选项将该映像作为新容器运行。这真的是正确的方法吗

编辑:我最初可能没有说清楚的是,我考虑的情况是,自容器最初运行以来,容器中发生了一些更改,这些更改需要持久化。因此,仅从原始图像运行新容器是不够的。

假设您想要更改此容器的重新启动策略 从总是失败到失败。为此,您需要停止容器, 删除它并使用新的重新启动策略重新运行它


好的,为了回答我自己的问题,似乎不可能只使用
--restart=always
重新启动同一个容器,因为这是第一次运行容器时必须执行的操作,而不是启动现有容器时可以使用的参数

docker update --restart=always <CONTAINER ID>
有三种可能的解决方法:

  • 如@user2915097所述,您可以放弃原始容器(停止它,然后使用
    docker rm
    将其删除以进行整理)。然后,只需从原始映像运行一个新容器,这次指定
    -restart=always
    选项
  • 如果没有使用卷,因此更改是容器内部的,则需要将容器提交到新映像,然后从该映像运行新容器

    docker提交

    docker run-d--restart=始终

  • 如果使用了卷并且所有更改仅限于卷,则可以使用
    --volumes from
    参数运行第二个容器,而无需提交映像的新版本。i、 e

    • docker站
    • docker run-d--restart=always--volumes from
    然后可以安全地删除容器1,因为当另一个容器继续使用卷时,卷不会被删除


  • 我猜还有第四种可能性;如果您使用了一个或多个卷,并且您知道对容器所做的更改不在该卷上,那么您必须使用(2)和(3)的组合。更新:这可以启用重新启动。但如果将其设置回“否”,则会将其重置回“始终”,容器将再次启动!:(我将把这个答案留在这里,以防有人知道这到底是怎么回事。我一定很接近!

    伙计们,我找到了复制容器等的最黑客的解决方案

    vi/var/lib/docker/containers/$(docker-inspect-f'{.Id}}'$ContainerID)/hostconfig.json

    搜索“RestartPolicy”。将其设置为“否”、“始终”等

    也许有人能把它写成剧本

    无论如何,这段json以及config.json将允许您修改创建容器时遗漏的所有内容。

    我们现在有了docker,它允许更改正在运行的容器的重启策略

    docker update --restart=always <CONTAINER ID>
    
    docker更新--重新启动=始终
    
    还有三种选择:

    • 否(默认值)
    • 论失败
    • 除非停止

    有关详细信息,请参阅。

    但问题是,您将丢失原始容器中的任何更改,因为您已将其删除并从头创建了一个新容器。我非常确定,如果原始容器中有任何更改,提交新映像并从中运行新容器会更好所以我们回到你的commit@rdc你应该尽量避免因为这样的事情而在容器中进行更改-要么将其保存在卷中,要么保存在某种DB中。这个答案不再相关,请查看@Frank Wong的回答对任何尝试这样做的人发出警告,Docker的许多状态管理与ASU一起运行我认为这是唯一修改/var/lib/docker内容的东西。在这里进行更改时要非常小心。啊,是的,这取决于所做的更改和保持打开的文件。为了安全起见,请随时停止docker引擎。我希望他们在后续版本中添加进行更改的功能。没有该功能是疯狂的y操纵重新启动策略。可能很快会添加一个新的设置功能。这是在哪个版本的Docker中引入的?它从1.11.0版开始提供。为什么我们在kitematic中看不到这一点?有人知道吗?或多或少重复: