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

Traefik v2部署Docker Compose服务时/flask路径404错误求助

解决Traefik转发Flask服务出现404的问题

问题描述

使用以下Docker Compose配置时,Traefik仪表盘和whoami服务均可正常访问,但访问http://localhost/flask时出现404错误:

version: "3"
networks:
  vester-net:
    name: vester-net

services:
  traefik:
    image: traefik:v2.10
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - vester-net
    command: --api.insecure=true --providers.docker --accessLog
    ports:
      - 80:80
      - 8080:8080
    labels:
      - traefik.enable=true
 
  whoami:
    image: traefik/whoami:v1.8
    networks:
      - vester-net
    labels:
      - traefik.http.routers.mywhoami.rule=(Host(`localhost`) && PathPrefix(`/whoami`))

  simplified_flask:
    build:
      context: ./apps/score
    networks:
      - vester-net
    labels:
      - traefik.http.routers.myflask.rule=(Host(`localhost`) && PathPrefix(`/flask`))

解决方案

1. 修改Docker Compose配置,添加路径剥离中间件

Traefik会将完整的/flask路径转发给Flask服务,但如果Flask应用没有/flask对应的路由,就会返回404。需要添加中间件剥离前缀,将请求转发到Flask的根路径:

version: "3"
networks:
  vester-net:
    name: vester-net

services:
  traefik:
    image: traefik:v2.10
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - vester-net
    command: --api.insecure=true --providers.docker --accessLog
    ports:
      - 80:80
      - 8080:8080
    labels:
      - traefik.enable=true
 
  whoami:
    image: traefik/whoami:v1.8
    networks:
      - vester-net
    labels:
      - traefik.http.routers.mywhoami.rule=(Host(`localhost`) && PathPrefix(`/whoami`))

  simplified_flask:
    build:
      context: ./apps/score
    networks:
      - vester-net
    labels:
      - traefik.http.routers.myflask.rule=(Host(`localhost`) && PathPrefix(`/flask`))
      # 添加路径剥离中间件
      - traefik.http.middlewares.flask-stripprefix.stripprefix.prefixes=/flask
      # 路由引用该中间件
      - traefik.http.routers.myflask.middlewares=flask-stripprefix@docker
      # 可选:如果Flask服务端口不是默认5000,指定端口
      # - traefik.http.services.myflask.loadbalancer.server.port=5000

2. 确认Flask应用的路由配置

确保你的Flask应用中有根路径的路由,比如:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
    return "Hello from Flask!"

if __name__ == '__main__':
    app.run(host='0.0.0.0')

3. 验证服务状态

  • 重新启动服务:docker-compose up -d --build
  • 查看Flask服务日志确认是否正常启动:docker-compose logs simplified_flask
  • 检查Traefik仪表盘(http://localhost:8080),确认simplified_flask服务已被正确识别并关联到路由

内容的提问来源于stack exchange,提问作者Amon Bazongo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:28:14