【问题标题】:Traefik's "Basic example with docker-compose" not workingTraefik 的“使用 docker-compose 的基本示例”不起作用
【发布时间】:2021-10-25 13:21:48
【问题描述】:

关注this tutorial

version: '3.8'

services:
  reverse-proxy:
    container_name: traefik
    image: traefik:v2.5
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    container_name: whoami
    image: "traefik/whoami"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.vws.dev`)"
      - "traefik.http.routers.whoami.entrypoints=web"

在我的浏览器上尝试时,我无法从以下位置获得响应:

【问题讨论】:

    标签: docker docker-compose traefik


    【解决方案1】:

    您在docker-compose.yml 文件中配置的任何内容都无法让您的浏览器“知道”如何将名称vws.dev 映射到您的容器。如果您打开您的撰写堆栈,您可以通过显式设置 Host 标头来验证它是否使用 curl 工作,如下所示:

    curl -H 'Host: whoami.vws.dev` localhost:80
    

    在我的系统上打印如下内容:

    Hostname: 65df3ef3b7d2
    IP: 127.0.0.1
    IP: 172.19.0.3
    RemoteAddr: 172.19.0.2:43904
    GET / HTTP/1.1
    Host: whoami.vws.dev
    User-Agent: curl/7.76.1
    Accept: */*
    Accept-Encoding: gzip
    X-Forwarded-For: 172.19.0.1
    X-Forwarded-Host: whoami.vws.dev
    X-Forwarded-Port: 80
    X-Forwarded-Proto: http
    X-Forwarded-Server: 2b2a7ec697d6
    X-Real-Ip: 172.19.0.1
    

    如果您希望能够在浏览器中访问http://whoami.vws.dev,则必须以某种方式将该名称映射到容器的 IP 地址。在类 Unix 系统上,您通常可以通过编辑 /etc/hosts 文件来完成此操作;例如,我可以通过将 whoami.vws.dev 附加到名称列表来修改 127.0.0.1 的条目:

    127.0.0.1  localhost ... whoami.vws.dev
    

    有了这个改变,我就可以跑了:

    $ curl whoami.vws.dev
    Hostname: 65df3ef3b7d2
    IP: 127.0.0.1
    IP: 172.19.0.3
    RemoteAddr: 172.19.0.1:43748
    GET / HTTP/1.1
    Host: whoami.vws.dev
    User-Agent: curl/7.76.1
    Accept: */*
    

    对于“真实”部署,您通常会添加一个 DNS 条目,将您所需的主机名映射到您的 docker 主机的地址。

    【讨论】:

    • 我很困惑,我认为这是 traefik 的一项功能,因此您不必修改本地主机文件。最后我什至不确定我应该使用 Traefik。此外,这个“基本示例”听起来很误导
    • Traefik 执行与任何其他前端代理相同的角色(将主机名和路径映射到特定后端)。这很好,因为它是基于容器标签动态配置的,这在您经常创建和删除服务的环境中非常有用。在一个小的静态 docker-compose 设置中,它不一定会是一个巨大的胜利。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2018-06-03
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多