docker 堆栈部署不更新配置

docker stack deploy does not update config

尝试使用 docker 堆栈部署设置零停机部署,docker 集群单节点本地主机环境。

构建镜像demo:latest后,第一次部署使用命令docker stack deploy --compose-file docker-compose.yml demo可以看到4个副本运行并且可以在我本地机器上的端口8080上访问nginx默认主页。现在更新 index.html,构建具有相同名称和标签的映像 运行 docker stack deplopy 命令导致以下错误,更改未反映出来。

删除部署并重新创建会起作用,但我想看看如何在不停机的情况下进行更新。请在这里帮忙。

错误

Updating service demo_demo (id: wh5jcgirsdw27k0v1u5wla0x8)
image demo:latest could not be accessed on a registry to record
its digest. Each node will access demo:latest independently,
possibly leading to different nodes running different
versions of the image.

Dockerfile

FROM nginx:1.19-alpine
ADD index.html /usr/share/nginx/html/

docker-compose.yml

version: "3.7"
services:
  demo:
    image: demo:latest
    ports:
      - "8080:80"
    deploy:
      replicas: 4
      update_config:
        parallelism: 2
        order: start-first
        failure_action: rollback
        delay: 10s
      rollback_config:
        parallelism: 0
        order: stop-first

TLDR:构建镜像后将其推送到注册表

如果没有 public 或私有 docker 注册表,

Docker swarm 将无法正常工作。基本上所有节点都需要从同一个地方获取它们的图像,而注册表是共享该信息的机制。还有其他方法可以在 swarm 中的每个节点上加载图像,但它涉及在每个节点上一次一个地执行相同的命令来加载图像,这不是很好。

或者,您可以对配置数据使用 docker 配置,而不是每次都重建映像。在没有注册表的情况下,这也可以很好地工作,并且您可以在几乎没有停机时间的情况下换出配置数据:

Rotate Configs