为Traefik定义主机和路径前端规则

Rus*_*our 9 traefik

我正在尝试使用Traefik在我的Docker Swarm模式集群中部署代理多个应用程序.

我已经得到它,以便它代理一个命名的主机,但我希望它代理一个命名的主机和路径,但我无法计算出我需要使用的标签.

这是docker service我使用的命令:

 docker service create \
                       \
    --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
Run Code Online (Sandbox Code Playgroud)

如果主机是,dummy.localhost那么我可以打开portainer应用程序http://dummy.localhost.但是我想修改它以便我必须使用http://dummy.localhost/portainer.

我已经看到有一些方法可以在为Traefik使用toml文件时执行此操作,但我在部署的docker服务上使用监视模式和标签.

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

Tim*_*ann 14

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

Host: <your host rule>; PathPrefixStrip: /portainer
Run Code Online (Sandbox Code Playgroud)

以上含义是:如果主机和路径前缀匹配,Traefik会将请求路由到关联的后端(并在转发之前剥离指定的路径前缀).这甚至可以在标签内定义时使用.

有关详细信息,请参阅前端文档.