我有一个Docker Swarm集群(目前有5台机器),我在这里运行所有的Docker Stack,从主机启动:manager1:

$ docker stack deploy -c docker-compose.yml mystack

但我使用Traefik作为反向代理 . 我想添加一个Syncthing容器来在节点之间共享一些数据,所以我希望它在每个节点上运行 . 这是通过选项实现的:

deploy:
  mode: global

这正确地创建了我想要的容器,每个节点一个 .

然后,我想访问每个Syncthing实例,感谢Traefik,这样的独特网址:

前端:manager1.syncthing.mydomain.com - > backend:主机manager1前端的syncthing容器:worker1.syncthing.mydomain.com - > backend:主机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" . 一些研究表明,至少不能用$ 代替“”(pull/30781),而是用"manager1" . 无论如何,我认为可以安全地预期这不会起作用,因为可能在运行 docker stack deploy 命令的master1节点上进行替换 .

作为一种解决方法,我可以为每个节点部署一个服务,并使用放置约束为每个节点部署一个服务;但这不会扩展,因为必须手动添加新节点 .

任何帮助将不胜感激 .

PS:我在树莓派上把所有东西当作手臂 .

  • Docker版本17.05.0-ce,build 89658be

  • docker-compose版本1.9.0,版本2585387

  • traefik:cancoillotte