[英]traefik reverse-proxy with docker backend - configure frontend rules in traefik's config file and not via container label
為了在一個Docker容器前面使用traefik作為反向代理,其動態IP地址可能會隨着時間而改變,traefik附帶一個docker 后端 。 我設置的所有示例都遵循相同的模式:
首先,啟動traefik在docker
模式,而無需額外的配置文件,啟動主機網絡模式(可選,讓traefik可以看到,如果需要在主機上的所有泊塢窗網),並安裝多克爾Unix套接字使traefik可以聽容器啟動和停止。
docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v /dev/null/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug
然后,啟動另一個容器並至少設置以下標簽 :
例:
docker run --rm --name nginx -l traefik.backend="some-backend-name" -l traefik.frontend.rule="Host: localhost; Method: GET" -l traefik.port="80 nginx
然后,執行curl localhost
,可以在traefik
容器的日志中看到它接收了請求並將其路由到NGINX容器。
到目前為止,這么好......但是,我不喜歡我必須在應用程序本身(我的docker-中)配置我的反向代理轉發規則(例如轉發主機:some.host.name到容器xxx)這一事實。撰寫文件設置容器,標簽等通常位於)。 相反,我想將其與應用程序分開,並將其配置為traefik配置的一部分。
這有可能嗎? 我嘗試的是從示例nginx容器中traefik.frontend.rule
標簽,而是為traefik
安裝以下配置文件:
[frontends]
[frontends.frontend1]
backend = "some-backend-name"
[frontends.frontend1.routes.test_1]
rule = "Host: localhost; Method: GET"
因此, traefik
的啟動命令變為:
docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug
但是,這似乎沒有使用來自nginx容器的后端標簽附加配置文件中的前端規則。 curl localhost
現在返回404 / Not found
錯誤。
watch flag似乎只能在rule.toml第一次更改的條件下工作。
在您的情況下,我建議您編寫一個服務來更新您在etcd或zookeeper中的規則。 服務讀取etcd更改並更新etcd中的traefik配置。
這可能是一個操作順序問題。 在config( debug = true
)中啟用調試日志記錄顯示traefik首先解析配置文件前端規則,然后才根據docker中運行的內容生成前端和后端。
這意味着當創建配置的前端時,docker后端不存在,並且它會拋出並出錯。
一種解決方案是將規則配置放在一個單獨的文件中(例如,docs中顯示的 rules.toml
),並將watch = true
指令添加到您的配置中。 這意味着您定義的前端規則將在生成docker的后端后更新。
我們應該為此提交一個錯誤,因為它並不是完全合乎需要的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.