docker - Traefik 作为 Docker 容器与主机网络的代理

标签 docker docker-compose traefik

我想设置以下场景:

  • 一台带有 Docker 容器的物理机
  • 带有网络后端的容器中的traefik
  • 另一个使用主机网络的容器 (network_mode: host)

Traefik 成功找到容器并使用 IP 地址 127.0.0.1 添加它,这显然无法从 traefik 容器(不同的网络/网桥)访问。

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 或使用 http://$HOST_IP:8080 访问 app 来自 traefik 容器。

我能以某种方式说服 traefik 对容器使用另一个 IP 吗?

谢谢!

最佳答案

如果没有通用的 docker 网络,traefik 将无法路由到您的容器。由于您使用的是主机网络,因此可以直接访问它。或者,如果您只需要通过代理访问它,则将其放置在后端网络上。如果您需要在主机上发布一些端口,而其他端口则通过 traefik 进行代理,那么请将其放在后端网络上并发布您需要发布的端口,而不是直接使用主机网络。

recent versions of traefikdocker ,可以让代理连接回 docker 主机的端口。您需要在 Linux 上定义 host.docker.internal 主机名(这应该在 Docker 桌面环境中自动提供):

    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
        extra_hosts:
            - "host.docker.internal:host-gateway"

关于docker - Traefik 作为 Docker 容器与主机网络的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45760040/

相关文章:

mongodb - Dockerized MongoDB在长时间写入有限制的collectin(SEGFAULT)期间不断崩溃

linux - Docker Compose - 删除悬挂服务

python - docker 内的Django服务器是否导致机器人测试显示空白屏幕?

docker - 使用 docker-compose 引导 Strapi

proxy - Ingress Controller (Traefik) 和 Kubernetes 上的后端服务之间的安全通信

kubernetes - Traefik在Ingress中重定向过多

docker - Traefik仪表板仅在http端口上

docker - 如何在 Docker 容器上配置环境变量而不将其硬编码到 Dockerfile 中?

apache - 在一台服务器上讨论 Docker 和 Apache

docker - 将 docker-compose 升级到版本 3