如何更新docker服务/堆栈使用的最新映像?

时间:2018-06-19 20:10:14

标签: docker docker-swarm docker-stack portainer

.yml定义中,我总是提取服务的latest图片。

当我将新映像推送到注册表时,我想更新堆栈中的服务使用的映像。我看不到任何--pull标志,并且docker service update的文档中没有明确提及这一点。

如何使用最近推送的latest图片重新部署?

3 个答案:

答案 0 :(得分:5)

确实不应在生产中使用latest或进行本地机器测试/学习以外的任何操作。这样一来,您就无法确定正在使用哪个映像,并且无法在docker service ls/ps中分辨出它是否默认为当前映像以及其他各种歧义(例如,在Docker Hub的GUI中看不到SHA)。

如果您无法解决它,至少请Swarm trys 查询您的注册表并检查更新的SHA。如果看到带有docker service update --image <username>/<repo> <servicename>的那个,它将拉动并进行滚动更新。您可以观看docker events以确保事情正在发生,还可以使用docker service ps --no-trunc <servicename>进行检查,然后查看新旧图像的SHA哈希值。

答案 1 :(得分:4)

如果您使用撰写文件来部署服务。我不建议使用此命令:

docker service update --image <username>/<repo> <servicename>    

这将导致文件过时,并且不再是服务配置的记录源。而是按照Bret Fisher的建议,使用特定的图像版本更新撰写文件,然后运行以下命令:

docker stack up -c </path/to/compose.yml> <servicename>

如果其他人也在管理该群,则保持有效记录很重要。

答案 2 :(得分:0)

要添加到 Bret Fisher 的答案中,使用相同的docker stack deploy -c compose-file.yml文件运行compose-file.yml,并且将图像标记为latest确实会比较图像的SHA,并在需要时重新部署相应服务的图像。

这要感谢Docker 17.09中添加的--resolve-image标志,该标志默认为always

在测试它时,我发现它甚至可以根据需要拉出最新的图像。

相关的GitHub问题:https://github.com/moby/moby/issues/30951#issuecomment-342647614