在主机网络中运行的docker容器的traefik代理

时间:2019-08-11 17:08:58

标签: windows docker docker-machine traefik

我正在traefik作为docker容器中的代理运行
我在Windows 10中使用DockerToolBox
traefik代理能够识别在127.0.0.1中运行的服务应用程序,但是该服务应用程序实际上在docker host = 192.168.99.x ip

中运行
version: '3'
services:
  reverse_proxy:
    image: traefik
    command: --api --docker 
    ports:
      - "81:80"
      - "8081:8080"

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - backend

  whoami:
    image: containous/whoami
  labels:
    - "traefik.frontend.rule=Host:whoami.default"
    - "traefik.enable=true"
    - "traefik.port=80"
  network_mode: host

networks:
  backend:
    driver: bridge  
在Traefik信息中心http://192.168.99.100:8081

它显示http://127.0.0.1:80代表whoami服务
而不是http://192.168.99.100:80
任何帮助将不胜感激。
我希望 network_mode:主机选择 192.168.99.100 而不是 127.0.0.1

1 个答案:

答案 0 :(得分:0)

正如traefik official documentation所说,在解析服务IP时,首先是

<块引用>

尝试查找 host.docker.internal

第二个

<块引用>

如果查找不成功,回退到127.0.0.1

这意味着我们可以在traefik容器中添加一个主机,使用--add-host {docker0_IP}(它是网桥的IP,你可以很容易地使用docker inspect {NAME_OF_TRAEFIK}找到网关的IP(对我来说,它是{{ 1}}). 如果您使用 docker-compose,您可以使用以下行添加到您的 traefik 定义中:

172.18.0.1

另外,我发现使用ip my eth0 IP是可以的,这意味着你的局域网的IP(对我来说,它是extra_hosts: - host.docker.internal:{docker0_IP} )。

然后,重新创建 traefik,一切都像雏菊一样工作。