【发布时间】:2021-11-29 16:39:20
【问题描述】:
traefik 的 2 天大新手,需要帮助了解 istm 是 traefik v2 中基本的第一个 docker 提供程序配置...
我试过搜索文档,但不知道该怎么做。
我想要像这样的 docker 容器
- app1
- app2
- app3
并通过 traefik 通过 url 访问这些内容
http://app.mydomain.com/app1http://app.mydomain.com/app2http://app.mydomain.com/app3
但是应用程序本身不喜欢这些额外的路径,所以我想从访问路径中去掉前缀,这样应用程序就看不到它们了。
如果我访问http://app.mydomain.com/app2/foo,我希望容器app2 获取请求http://{container.ip.addr}}/foo
作为一个复制者,我知道部分有效的配置在我的 traefik docker-compose.yml 中有以下内容:
version: "3"
services:
traefik:
image: "traefik:v2.5.4"
command:
- --entrypoints.web.address=:80
- --providers.docker=true
- --api
- --api.insecure=true
- --api.dashboard=true
- --providers.file.directory=/etc/traefik/dynamic
- --providers.docker.defaultRule=Host(`app.mydomain.com`) && PathPrefix(`/{{ index .Labels "com.docker.compose.service" }}`)
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
app1:
image: containous/whoami:v1.3.0
app2:
image: containous/whoami:v1.3.0
app3:
image: containous/whoami:v1.3.0
将127.0.0.1 app.mydomain.com 添加到\etc\hosts 后,对http://app.mydomain.com/app{1,2,3}/foo 进行curl 处理,这会路由到正确的服务,但他们收到的请求路径是/app1/foo、/app2/foo、/app3/foo,而我想要他们都得到/foo。
我觉得我希望能够将以下内容添加到 docker-compose 中的命令行参数中:
--providers.docker.middleware.default-stripprefix.stripprefix.prefixes=`/{{ index .Labels "com.docker.compose.service" }}`
但它不起作用(错误:command traefik error: failed to decode configuration from flags: field not found, node: middleware)
我找不到任何说明正确命令行参数可能是什么的文档。
我在想它可能需要在一个动态配置文件中(我已经看到这太搞乱 tls 配置了,但在这个阶段想把所有这些都排除在复制之外!)但似乎又不能找到默认中间件的正确配置。
我可以找到很多引用(并让它工作),我必须在每个容器的标签中指定它,但我更愿意在 traefik 配置本身中使用一次性条目默认它。
这两天我一直在为此苦恼。我试过搜索文档站点、这个社区和 googleverse,但没有运气。对我来说,这似乎是一个“101”配置! :-)
请有人帮助我不仅解决我的问题,还可以选择教我如何在文档站点中自己找到解决方案。我已经看到很多关于 doc 网站很好的提及,但对于 v2 而言,它们对我来说似乎很少。
【问题讨论】: