Traefik 作为 Docker 容器与主机网络的代理
Traefik as a proxy for Docker container with host machines network
我想设置以下场景:
- 一台带有 Docker 个容器的物理机
- 带有网络的容器中的 traefik
backend
- 另一个正在使用主机网络的容器 (
network_mode: host
)
Traefik 成功找到容器并将其添加到 IP 地址 127.0.0.1
,这显然无法从 traefik 容器访问(不同 network/bridge)。
docker-compose.yml:
version: '3'
services:
traefik:
image: traefik
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/etc/traefik/traefik.toml
networks:
- backend
app:
image: my_app
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:myapp.example"
- "traefik.port=8080"
network_mode: host
networks:
backend:
driver: bridge
app
容器添加了
Server URL Weight
server-app http://127.0.0.1:8080 0
Load Balancer: wrr
当然我可以在主机上使用 http://127.0.0.1:8080
或从 traefik 容器中使用 http://$HOST_IP:8080
访问 app
。
我能以某种方式说服 traefik 为容器使用另一个 IP 吗?
谢谢!
没有通用的 docker 网络,traefik 将无法路由到您的容器。由于您使用的是主机网络,因此几乎不需要 traefik 代理容器,只需直接访问它即可。或者,如果您只需要通过代理访问它,则将其放在后端网络上。如果你需要一些端口在宿主机上发布,而另一些端口通过traefik代理,那么把它放在后端网络上并发布你需要发布的端口,而不是直接使用宿主机网络。
我想设置以下场景:
- 一台带有 Docker 个容器的物理机
- 带有网络的容器中的 traefik
backend
- 另一个正在使用主机网络的容器 (
network_mode: host
)
Traefik 成功找到容器并将其添加到 IP 地址 127.0.0.1
,这显然无法从 traefik 容器访问(不同 network/bridge)。
docker-compose.yml:
version: '3'
services:
traefik:
image: traefik
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/etc/traefik/traefik.toml
networks:
- backend
app:
image: my_app
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:myapp.example"
- "traefik.port=8080"
network_mode: host
networks:
backend:
driver: bridge
app
容器添加了
Server URL Weight
server-app http://127.0.0.1:8080 0
Load Balancer: wrr
当然我可以在主机上使用 http://127.0.0.1:8080
或从 traefik 容器中使用 http://$HOST_IP:8080
访问 app
。
我能以某种方式说服 traefik 为容器使用另一个 IP 吗?
谢谢!
没有通用的 docker 网络,traefik 将无法路由到您的容器。由于您使用的是主机网络,因此几乎不需要 traefik 代理容器,只需直接访问它即可。或者,如果您只需要通过代理访问它,则将其放在后端网络上。如果你需要一些端口在宿主机上发布,而另一些端口通过traefik代理,那么把它放在后端网络上并发布你需要发布的端口,而不是直接使用宿主机网络。