带有restart_policy的Docker堆栈部署抛出“来自守护程序的错误响应:无效的RestartCondition:“除非停止”

时间:2018-06-28 18:50:19

标签: docker docker-compose

当我尝试使用public class List1 { public string Name { get; set; } public DateTime DateFrom { get; set; } public DateTime DateTo { get; set; } public decimal TotalValue { get; set;} public List<Elements> Details { get; set;} } public class Elements { public string Name { get; set; } public DateTime DateFrom { get; set; } public DateTime DateTo { get; set; } public decimal Value { get; set; } } 运行它时,出现错误:docker stack deploy -c docker-compose.yml stack-name

如果被中断,我需要超级服务和docker容器重新启动。没有Error response from daemon: invalid RestartCondition: "unless-stopped"(仅对容器使用restart_policy),如果我重新启动计算机,它将仅重新启动容器,而不重新启动服务。超级服务使我可以使用仅服务的docker功能(例如机密,配置,资源等)。容器让我可以使用设备。

Docker supports the restart policy。我也看到了this thread,但不确定是如何制作的,或者是否相关。我有点Docker新手。

我的--restart unless-stopped文件:

docker-compose.yml

Docker版本18.05.0-ce,内部版本f150324

Linux raspberrypi 4.14.50-v7 +#1122 SMP Tue Jun 19 12:26:26 BST 2018 armv7l GNU / Linux

2 个答案:

答案 0 :(得分:1)

如果您以堆栈形式部署,则不需要重新启动策略,甚至在极端情况下(主机内存不足),它甚至会破坏事情。这是因为群组模式会查看您定义的目标状态,将其与当前状态进行比较,并协调所有差异。

因此,如果您的容器停止运行,则无论重启策略如何,群集模式都会重新创建一个新实例。手动停止容器将导致启动新实例,这与失败相同,甚至滚动更新。

要手动停止由群集模式管理的容器,您需要推送新的目标状态,该服务将0个副本作为新目标。

答案 1 :(得分:0)

回答我自己的问题:

重启策略不会将1:1的docker compose映射到docker cli。

可以找到

docker-compose 策略here

可以找到

docker cli 策略here