我有一个Docker Swarm集群(目前有5台计算机),我将所有内容作为Docker Stack运行,从主机启动:manager1:
$ docker stack deploy -c docker-compose.yml mystack
但我使用Traefik作为反向代理。 我想添加一个Syncthing容器来在节点之间共享一些数据,所以我希望它在每个节点上运行。这是通过以下选项实现的:
deploy:
mode: global
这正确地创建了我想要的容器,每个节点一个。
然后,我希望访问每个Syncthing实例,感谢Traefik,这样的唯一网址:
frontend:manager1.syncthing.mydomain.com - >后端:主机管理器1上的syncthing容器 前端:worker1.syncthing.mydomain.com - >后端:主机worker1上的syncthing容器 前端:worker2.syncthing.mydomain.com - >后端:主机worker2上的syncthing容器 ...
我找不到合适的配置(甚至可能吗?)。
我想在docker-compose中替换变量,如下所示:
deploy:
...
labels:
...
- "traefik.frontend.rule=Host:${HOSTNAME}.syncthing.mydomain.com"
即使在所有节点(包括管理器)上定义了$ HOSTNAME,也会失败; Traefik创建了一条无用的路线:“。syncthing.mydomain.com”。一些研究表明,这至少不能用$ {HOSTNAME}替换“”(pull/30781)而是替换为“manager1”。无论如何,我认为可以安全地预期这不会起作用,因为替换可能会在运行docker stack deploy
命令的master1节点上完成。
作为一种解决方法,我可以为每个节点部署一个服务,并使用放置约束为每个节点部署一个服务;但这不会扩展,因为必须手动添加新节点。
非常感谢任何帮助。
PS: 我在树莓派上把一切都当作手臂。