You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik动态YAML配置Docker Compose服务提示服务不存在解决方法

Traefik动态配置文件正确配置whoami服务的方法

问题背景

原本通过Docker Compose标签配置whoami容器的路由规则,现在想把这部分配置迁移到Traefik的动态配置文件(whoami.yml)中,但启动后Traefik日志报错:

{"entryPointName":"mydashboard","level":"error","msg":"the service "whoami@file" does not exist","routerName":"whoami@file","time":"2024-02-03T14:18:20Z"}

原Docker Compose文件:

version: '3'

services:
  traefik:
    image: traefik:v2.10
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - C:\\Users\\juann\\OneDrive\\Documents\\Development\\TraefikTests:/etc/traefik
      - C:\\Users\\juann\\OneDrive\\Documents\\Development\\TraefikTests\\logs:/traefik/logs
      - C:\\Users\\juann\\OneDrive\\Documents\\Development\\TraefikTests\\config:/traefik/config
    labels:
      - traefik.enable=true

  whoami:
    image: traefik/whoami
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"

用户创建的whoami.yml动态配置文件:

http:
  routers:
    whoami:
      entryPoints:
        - "mydashboard"
      service: "whoami"
      rule: 'Host(`{{ "whoami.docker.localhost" }}`)'

报错原因

动态配置里的路由指定了service: "whoami",但这个服务在文件配置(file provider)中未定义,Traefik默认会把这个服务解析为whoami@file,而实际whoami容器的服务由Docker provider提供,ID为whoami@docker,导致找不到对应服务。

解决方案

方案一:在动态配置中定义对应服务,指向Docker容器

修改whoami.yml,添加services节点,明确配置负载均衡指向whoami容器(同一Docker Compose网络下可直接用容器名访问):

http:
  routers:
    whoami:
      entryPoints:
        - "mydashboard"  # 注意:需确保Traefik静态配置中已定义该入口点,否则会报错
      service: "whoami"
      rule: 'Host(`whoami.docker.localhost`)'
  services:
    whoami:
      loadBalancer:
        servers:
          - url: "http://whoami:80"  # whoami容器默认暴露80端口,同一网络用容器名即可访问

方案二:直接引用Docker Provider提供的服务

直接在路由配置中指定Docker provider提供的服务ID whoami@docker,无需额外定义服务:

http:
  routers:
    whoami:
      entryPoints:
        - "mydashboard"
      service: "whoami@docker"  # 明确引用Docker管理的whoami服务
      rule: 'Host(`whoami.docker.localhost`)'

额外注意事项

  1. 开启File Provider:需在Traefik静态配置文件(如traefik.yml)中开启文件配置监听:
providers:
  file:
    directory: /traefik/config  # 对应compose中挂载的config目录
    watch: true  # 自动监听配置文件变化
  1. 确认入口点存在:静态配置中必须定义mydashboard入口点,否则需修改为已存在的入口点(比如默认的web,对应80端口):
entryPoints:
  web:
    address: ":80"
  # 如果保留mydashboard,需添加如下配置
  mydashboard:
    address: ":8081"  # 注意不要和Traefik dashboard的8080端口冲突
  1. 清理冗余标签:修改whoami容器的Compose配置,删除原路由规则标签,仅保留启用开关:
whoami:
  image: traefik/whoami
  labels:
    - "traefik.enable=true"

内容的提问来源于stack exchange,提问作者juan noguera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:57:48