在.yml
定义中,我总是拉扯latest
我的服务形象。
当我将新图像推送到注册表时,我想更新堆栈中的服务使用的图像。我没有看到任何--pull
标志,并且docker service update的文档没有明确提到这一点。
如何使用最近推送的latest
镜像重新部署?
在.yml
定义中,我总是拉扯latest
我的服务形象。
当我将新图像推送到注册表时,我想更新堆栈中的服务使用的图像。我没有看到任何--pull
标志,并且docker service update的文档没有明确提到这一点。
如何使用最近推送的latest
镜像重新部署?
你真的不应该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 哈希值。
如果您使用 compose 文件来部署服务。我不建议使用此命令:
docker service update --image <username>/<repo> <servicename>
这会导致您的文件过期并且不再是您的服务配置的记录来源。相反,按照 Bret Fisher 的建议,使用特定的图像版本更新您的 compose 文件,然后运行以下命令:
docker stack up -c </path/to/compose.yml> <servicename>
如果其他人也在管理群体,那么保持有效记录很重要。
要添加到Bret Fisher的答案,docker stack deploy -c compose-file.yml
使用相同的compose-file.yml
文件运行,并将图像标记为 aslatest
确实会比较图像的 SHA 并在需要时重新部署相应服务的图像。
这要归功于--resolve-image
Docker 17.09 中添加的标志,默认为always
.
在测试它时,我发现它甚至会在需要时提取最新的图像。
相关 GitHub 问题:https ://github.com/moby/moby/issues/30951#issuecomment-342647614 。