如何为 Traefik Proxy 正确配置 Docker 容器?

如何为 Traefik Proxy 正确配置 Docker 容器?

我正在尝试测试 Traefik Proxy,因此我将 Traefik 标签添加到我为 OpenSpeedTest 提供的现有 Compose 文件中。

version: '3.3'
services:
     speedtest:
          restart: unless-stopped
          container_name: openspeedtest
          labels:
               - "traefik.http.routers.speedtest.rule=Host(`internal.littlebitstudios.com`) && Path(`/speedtest`)"
               - "traefik.http.services.speedtest.loadbalancer.server.port=3000"
               - "traefik.http.routers.speedtest.entrypoints=http"
          ports:
               - '3050:3000'
               - '3051:3001'
          image: openspeedtest/latest

但是添加标签后,转到“internal.littlebitstudios.com/speedtest”不会显示 OpenSpeedTest。我不知道这个问题应该放在这里还是放在 Stack Overflow 上。

答案1

docker.sock使用权

您是否已授予 Traefik 容器访问权限docker.sock?(请参阅快速开始页)

您需要为 Traefik 提供对主机的 docker 服务的访问权限,这通常通过添加-v /var/run/docker.sock:/var/run/docker.sock或等效操作来完成docker-compose.yml

services:
  traefik:
    # ...
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Docker 提供商

您是否已启用对 docker 容器的监控?(请参阅Traefik 与 Docker页)。

您需要启用 Docker 提供程序,具体取决于您的配置(YAML 或 TOML)。添加一个空节点可能看起来很奇怪,但此节点的存在将启用该功能。

providers:
  docker: {}
[providers.docker]

您也可以使用命令行参数执行此操作:--providers.docker=true

默认公开

另一个考虑因素是providers.docker.exposedByDefault选项。默认值为true,但如果为false,则您希望 Traefik 考虑的每个容器都需要有标签traefik.enable=true

Docker 网络

最后,如果 Traefik 似乎可以处理请求,但您收到错误(例如:HTTP 504/网关超时),那么您需要确保 A)容器和 Traefik 共享一个公共网络,以及 B)您可能需要明确声明要使用哪个网络。

使用traefik.docker.network为容器明确提供标签或者覆盖它。

API / 仪表板

如果您仍在苦苦挣扎,那么 API 界面有一个仪表板选项,它对于弄清楚正在发生的事情非常有用。

api.dashboard,如果您提供api节点(即使是空的)

相关内容