在使用docker stack deploy
部署一组服务后,我对使用docker swarm mode命令更新现有服务存在疑问。
据我所知,每个服务在创建时都固定在图像的SHA256摘要上,因此如果您重建并推送图像(具有相同的标记)并尝试运行docker service update
,则服务图像不会更新(即使SHA256不同)。相反,如果再次运行docker stack deploy
,则会使用新图像更新所有服务。
我还设法使用docker service update --image repository/image:tag <service>
更新了服务图片。这是这些命令的正常行为还是我不理解的东西?
我正在使用Docker 17.03.1-ce
答案 0 :(得分:1)
Docker堆栈部署documentation说: &#34;从群组中的撰写或dab文件创建和更新堆栈。必须针对管理器节点运行此命令。&#34; 所以你描述的行为是预期的。
Docker服务更新documentation不是那么清楚,但你自己说它只与--image repository/image:tag <service>
一起运行,所以标志是更新图像所必需的。
你有两种方法可以达到你想要的效果。
答案 1 :(得分:1)
docker stack deploy
将现有服务的图像更新为指定标记链接的任何哈希值是正常和预期的行为。
如果没有标记,则会假定latest
- 这有时可能会有问题,因为大多数人都不太了解latest
标记,从而导致一些意外结果。