【发布时间】:2018-09-19 17:54:28
【问题描述】:
是否可以有一个不包含特定子域的通配符子域?
*.mydomain.com OK
login.mydomain.com SKIP
在我的应用容器上使用通配符时,我无法访问我的登录容器。下面是我想要完成的图像。 (交通标志在技术上应该在路线列表和容器之间)
如果包含规则HostRegexp:{subdomain:[a-z]+}.${HOST_DOMAIN},则以下配置不起作用。
在删除除通配符子域之外的所有内容的主机正则表达式后,此配置成功运行。
services:
traefik:
image: traefik
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- .traefik.toml:/etc/traefik/traefik.toml:ro
ports:
- "80:80"
- "443:443"
api:
image: my-api-image
labels:
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.frontend.rule=Host:app.${HOST_DOMAIN}; PathPrefix: /api"
app:
image: my-app-image
labels:
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.frontend.rule=Host:app.${HOST_DOMAIN}"
- "traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.${HOST_DOMAIN}" # this second rule overwrites the first rule and I am aware of that, I am just showing what rules i've tried :)
login:
image: my-login-image
labels:
- "traefik.enable=true"
- "traefik.port=80"
- "traefik.frontend.rule=Host:login.${HOST_DOMAIN}"
我的问题目前与app 容器有关。如果我将以下内容作为前端规则包含在内,我将得到一个错误的网关:
"traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.${HOST_DOMAIN}"
我也尝试将上述内容留在 app 下,并在没有任何运气的情况下删除以下内容:
"traefik.frontend.rule=Host:app.${HOST_DOMAIN}"
任何建议或想法将不胜感激。谢谢。
编辑:
稍微改写一下。
【问题讨论】:
-
在您的“改写”之后,不清楚您的问题是什么,您得到的“错误网关”或您的通配符规则与非通配符域匹配。如果您已经解决了最初的问题,请在下面发布答案(或者只要没有发布答案,就完全删除问题)并针对您的新问题提出另一个问题。
-
你说得对,我不应该在它上线这么长时间后进行编辑。我遇到网关问题的原因是因为我缺少为应用程序容器定义的主机,我需要
HostRegexp:app.${HOST_DOMAIN},{subdomain:[a-z]+}.${HOST_DOMAIN}"。添加应用程序后,错误的网关问题就解决了,然后我遇到的真正问题是通配符规则匹配。你的回答是我问题的正确答案。我宁愿保留它而不是删除它。
标签: docker docker-compose traefik