9

.yml定义中,我总是拉扯latest我的服务形象。

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

如何使用最近推送的latest镜像重新部署?

4

3 回答 3

13

真的不应该latest在生产或本地机器测试/学习之外的任何东西中使用。它使您使用的图像变得模棱两可,并且您无法判断docker service ls/ps它是否默认为当前以及各种其他模棱两可(例如 SHA 在 Docker Hub 的 GUI 中不可见)。

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

于 2018-06-21T17:37:28.587 回答
6

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

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

这会导致您的文件过期并且不再是您的服务配置的记录来源。相反,按照 Bret Fisher 的建议,使用特定的图像版本更新您的 compose 文件,然后运行以下命令:

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

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

于 2020-05-15T15:03:53.050 回答
2

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

这要归功于--resolve-imageDocker 17.09 中添加的标志,默认为always.

在测试它时,我发现它甚至会在需要时提取最新的图像。

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

于 2019-11-16T22:54:36.627 回答