2017-05-28 66 views
1

我正在尝试使用Traefik在我的Docker群集模式群集中部署代理多个应用程序。为Traefik定义主机和路径前端规则

我已经知道它是代理一个已命名的主机,但我希望它在一个已命名的主机和路径上进行代理,但我无法解决需要使用的标签。

这是docker service命令我使用:

docker service create --network traefik-net --label "traefik.port=9000" --label "traefik.docker.network =traefik-net" --label "traefik.frontend.rule=Host:`hostname -f`" --label="traefik.backend=portainer " --constraint "node.role == manager" -p 9000:9000 --mount "type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock" 
--name portainer portainer/portainer 

如果主机dummy.localhost然后我能够打到portainer应用上http://dummy.localhost。不过,我想修改它,以便我必须使用http://dummy.localhost/portainer

我已经看到,有些方法可以为Traefik使用toml文件时执行此操作,但我在我部署的泊坞员服务上使用watch模式和标签。

如何在我的标签中组合多个前端规则,以便可以在主机名和路径上代理此(和任何其他)应用程序?

回答

3

如果您希望应用多个规则以使路由决策生效,请用分号分隔它们。例如:

Host: <your host rule>; PathPrefixStrip: /portainer 

上述装置是什么:如果主机和路径前缀匹配,Traefik将请求路由到相关联的后端(一个或多个)(和转发之前指定的路径前缀剥离)。这在标签内定义时甚至可以工作。

有关详细信息,请参见the frontend documentation

+0

非常感谢你。我正在使用','而不是';'设置多个规则 –