Traefik with docker swarm and mode:global:frontend rule to substitute hostname

时间:2018-02-21 02:16:15

标签: docker docker-compose docker-swarm traefik

我有一个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: 我在树莓派上把一切都当作手臂。

  • Docker版本17.05.0-ce,build 89658be
  • docker-compose version 1.9.0,build 2585387
  • traefik:cancoillotte

0 个答案:

没有答案