【问题标题】:hot-reload traefik frontend rules in a file while using docker containers使用 docker 容器时在文件中热重载 traefik 前端规则
【发布时间】: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  

这可能吗?或者我只是在这里做一些根本错误的事情?

【问题讨论】:

标签: docker traefik


【解决方案1】:

当前 docker 配置:它可以工作,但它是硬编码的/不能热重载

您可能需要销毁容器并从头开始重新运行它。

容器在创建过程中只标记一次。

添加这个rules.toml文件(热重载的那个!)

您是否明确启用了文件监视?

providers:
  file:
    directory: /path/to/dynamic/conf
    watch: true

@见:https://doc.traefik.io/traefik/providers/file/

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    相关资源
    最近更新 更多