使用Traefik和docker-compose配置端口转发出现404错误问题咨询
问题根因
- 未给Traefik UI本身配置路由规则,
traefik.service.localhost没有对应转发规则,自然返回404 - api-service的Traefik配置缺失端口指定规则,Traefik不知道要转发到容器的哪个端口
- 当前访问带8080端口的地址是直接访问Traefik暴露的管理端口,没有经过Traefik的80端口路由逻辑
修正后的完整配置
version: '3.8' services: reverse-proxy: image: traefik:v2.4 container_name: reverse-proxy command: - "--api.insecure=true" - "--providers.docker" # 显式定义entrypoint,方便后续引用 - "--entrypoints.web.address=:80" ports: - "80:80" # 如果不需要直接通过8080端口访问Traefik UI,可以注释掉下面这行 - "8080:8080" labels: - traefik.enable=true - traefik.docker.network=pred-network # 配置Traefik UI的路由规则 - traefik.http.routers.traefik-ui.rule=Host(`traefik.service.localhost`) - traefik.http.routers.traefik-ui.entrypoints=web # 指定转发到Traefik自身的8080端口 - traefik.http.services.traefik-ui.loadbalancer.server.port=8080 volumes: - /var/run/docker.sock:/var/run/docker.sock networks: - pred-network api-service: image: x86_64/prediction-service:0.8.1 container_name: api-service environment: SERVING_SERVICE: model-service expose: - 80 labels: - traefik.enable=true - traefik.docker.network=pred-network - traefik.http.routers.api-service.rule=Host(`api.service.localhost`) - traefik.http.routers.api-service.entrypoints=web # 指定转发到api-service容器的80端口 - traefik.http.services.api-service.loadbalancer.server.port=80 networks: - pred-network networks: pred-network:
前置配置验证
需要先在本地hosts文件添加两条解析记录:
127.0.0.1 traefik.service.localhost 127.0.0.1 api.service.localhost
Windows系统hosts路径:C:\Windows\System32\drivers\etc\hosts
Linux/Mac系统hosts路径:/etc/hosts
生效步骤
- 先停止并删除原有容器和网络,避免旧配置缓存:
docker-compose down -v
- 重新启动服务:
docker-compose up -d
- 等待10秒左右即可测试:
- 访问
http://traefik.service.localhost可直接打开Traefik UI - 访问
http://api.service.localhost可打开api-service的Hello World页面 - 所有请求均走Traefik 80端口路由,不需要额外暴露api-service的端口
内容的提问来源于stack exchange,提问作者illuminato
相关产品推荐
相关产品推荐

