简单的 Træfɪk 反向代理安装

Simple Træfɪk reverse proxy installation

我正在尝试使用一些 docker 容器的漂亮 Træfɪk 反向代理。

这是我的Træfɪk docker-compose.yml:

version: '2'
services:
  traefik:
    image: traefik
    command: --web --docker --docker.domain=my-domain.net --logLevel=DEBUG
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /dev/null:/traefik.toml

这是我的服务'docker-compose.yml web 部分:

version: '2'
services:
  # [...]
  web:
    build: . # An nginx based image
    container_name: my_app_web
    volumes:
      - ..:/app/
    depends_on:
      - db
      - redis
    labels:
      - "traefik.backend=my_app"
      - "traefik.frontend.rule=Host:my-domain.net"
      - "traefik.port=80"

启动所有这些东西,我看到我的 frontend/backend 在 Træfɪk web UI 上创建,但我无法通过 my-domain.net.[=18 访问我的应用程序=]

$ curl -H Host:my-domain.net http://127.0.0.1
# ... after ±30s.
Gateway Timeout

Træfɪk 日志:

Error forwarding to http://172.18.0.4:80, err: dial tcp 172.18.0.4:80: i/o timeout

虽然我可以从它的本地 IP 访问该应用程序 (172.18.0.4),但它工作正常。

我肯定在这里忘记了什么,有什么帮助吗?


附加信息:

当您 运行 traefik 以 docker 作为后端时,无需公开 web 容器中的端口。因此,您应该安全地从撰写文件的 web 服务中删除 ports 部分。

您是否运行从同一个撰写文件中使用这两项服务?您必须确保 traefik 容器能够访问 web 容器。这在 运行 从同一个组合文件或将两个容器附加到同一个网络时有效。

超时的另一种可能性是您的 Web 容器暴露了多个端口(查看您的 Dockerfile)。如果是这种情况,您需要明确告诉 traefik 应该将请求映射到哪个端口。在您的情况下,这应该是 "traefik.port=80".

由于您正在 运行进行非常基本的设置,并且您已经使用标签设置域,因此无需提供一些特殊配置。请通过将 /dev/null 安装为 toml 文件来检查默认值,就像在 very basic docs.

中一样

对于 traefik 服务:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock
  - /dev/null:/traefik.toml

对于您的网络服务

labels:
  - "traefik.backend=my_app"
  - "traefik.frontend.rule=Host:my-domain.net"
  - "traefik.port=80"

按照@AndreasJägle 的建议,我检查了容器,它向我展示了 Traefik 和我在不同网络中的服务。

我认为默认情况下 docker 始终使用桥接模式,但从 v2 开始 compose networking 似乎不再如此。它正在为 docker-compose 文件创建网络(基于项目名称)。

因此,对于从 v2 开始的 compose,您必须通过需要通信的 docker-compose 文件指定一个公共网络。

这里,我简单的使用了为traefik生成的:

version: '2'
services:
  # ...
  web:
    # ...
    labels:
      - "traefik.backend=my_app"
      - "traefik.frontend.rule=Host:my-domain.net"
      - "traefik.port=80"

networks:
  default:
    external:
      name: traefik_default

附加信息:

Traefik 在 emilevauge/whoami 下运行良好,因为我正在定义一个 docker-compose v1 文件,所以它使用的是桥接模式。