对于使用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