對於使用traefik作爲Docker容器前的反向代理,其動態IP地址可能隨時間而改變,traefik附帶docker backend。我可以找到的所有設置都遵循相同的模式:帶docker後端的traefik反向代理 - 在traefik的配置文件中配置前端規則而不是通過容器標籤
首先,在沒有額外配置文件的情況下啓動trafik模式docker
,激活主機網絡模式(可選,以便traefik可以看到主機上的所有Docker網絡如果需要的話)並安裝Docker 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
然後,啓動另一個容器中,至少設置以下labels:
- traefik.backend: 「一些-後端名」
- traefik.frontend.rule:「主機:本地主機;方法:GET」(或任何你的規則)
- traefik.port:80(或任何與您的容器內部公開)
實施例:
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容器的日誌中看到。
到目前爲止,一切都很好。不過,我不喜歡的事實,我必須配置我的反向代理轉發規則(如前主持人:some.host.name集裝箱XXX)在應用程序中(我的docker-compose文件設置容器,標籤等通常位於此處)。相反,我想將它與應用程序分開,並將其配置爲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
錯誤。
感謝您的輸入。但是,在嘗試此操作時,結果完全相同。如果你碰巧找到一個這樣的工作例子,讓我知道。 – Dirk