【发布时间】:2019-01-18 15:45:52
【问题描述】:
我希望能够热重载前端规则,但使用 docker 容器。
我可以获取文件中定义的 traefik 前端规则并我们将 docker 容器名称作为后端吗?
当前 docker 配置:它可以工作,但它是硬编码的/不能热重载
docker run -d -p 8080:8080 -p 80:80 -v $PWD:/etc/traefik -v /var/run/docker.sock:/var/run/docker.sock traefik
docker run -d --name v1 -l "traefik.frontend.rule=PathPrefix:/,/foo" emilevauge/whoami
docker run -d --name v2 -l "traefik.frontend.rule=PathPrefix: /bar" emilevauge/whoami
/ 和 /foo 转到容器 v1; /bar 转到 v2。太好了。
挑战在于热重载前端规则。示例:我希望“bar”现在在 v1 上。
我的想法是切换到“文件”配置(因为文件更改被监视,因此可以热重载)
但我一直在配置后端。我可以在那里使用容器名称吗?
这是我尝试过的:
- 将后端标签添加到容器
docker run -d --name v1 -l "traefik.backend=v1" emilevauge/whoami - 添加这个
rules.toml文件(热重载的那个!)
[frontends]
[frontends.v1]
backend = "backend-v1"
[frontends.v1.routes.test]
rule = "PathPrefix: /,/foo"
[frontends.v2]
backend = "backend-v2"
[frontends.v2.routes.test]
rule = "PathPrefix: /bar"
不幸的是,这不起作用。看来我也需要在文件中声明后端。
如何向现有容器声明我的后端?
[backends]
[backends.v1]
--> here something to reference container v1
[backends.v2]
--> here something to reference container v2
这可能吗?或者我只是在这里做一些根本错误的事情?
【问题讨论】:
-
我对此也很好奇,主要是因为我想要一个添加新域的选项,每天针对应用程序,以便即时获得 Let's Encrypt SSL 证书。您可以热重载文件文件 docs.traefik.io/configuration/backends/file/#one-separate-file ,但不确定这是否适用于
[acme_domains]