我正在尝试测试 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
节点(即使是空的)