使用Docker Compose与Traefik部署Swagger UI及Editor的配置问题求助
配置问题排查与修改建议
现有配置核心问题
- 路由匹配规则不合理:使用
Path()是精确匹配,仅能匹配/ui、/editor单路径,子路径或带尾斜杠的请求都无法命中,且未指定Traefik转发的目标服务端口,Traefik无法确定流量转发地址。 - 服务路径适配缺失:Swagger UI、Swagger Editor默认运行在服务根路径,直接通过子路径转发会导致静态资源加载失败,需要配置对应的基础路径参数。
- Host规则适配问题:配置中的
Host(swaggerui)、Host(swaggereditor)需要本地配置hosts映射才能解析,未配置的情况下无法访问。
通用排查步骤
- 查看容器运行状态与日志:执行
docker compose ps确认所有容器处于运行状态,执行docker compose logs 服务名分别查看Traefik、Swagger UI、Swagger Editor的日志,排查启动报错。 - 检查Traefik路由状态:访问Traefik自带的Dashboard(默认端口8080),在Routers栏目下确认Swagger相关路由是否正常加载,是否存在配置错误标记。
- 验证服务本身可用性:跳过反向代理,直接进入容器内部访问对应端口,
docker compose exec swaggerui curl localhost:8081、docker compose exec swaggereditor curl localhost:8082,确认服务本身可以正常响应。
修改后可用配置
version: '3' services: traefik: image: traefik:v2.5 restart: always command: - --accesslog - --api.insecure=true - --providers.docker - --providers.docker.exposedbydefault=false volumes: - /var/run/docker.sock:/var/run/docker.sock ports: - "80:80" - "8080:8080" swaggerui: image: swaggerapi/swagger-ui restart: always environment: - PORT=8081 - BASE_URL=/ui expose: - 8081 labels: - traefik.enable=true - traefik.http.routers.swaggerui.rule=PathPrefix(`/ui`) - traefik.http.services.swaggerui.loadbalancer.server.port=8081 - traefik.http.middlewares.strip-ui.stripprefix.prefixes=/ui - traefik.http.routers.swaggerui.middlewares=strip-ui swaggereditor: image: swaggerapi/swagger-editor restart: always environment: - PORT=8082 - BASE_URL=/editor expose: - 8082 labels: - traefik.enable=true - traefik.http.routers.swaggereditor.rule=PathPrefix(`/editor`) - traefik.http.services.swaggereditor.loadbalancer.server.port=8082 - traefik.http.middlewares.strip-editor.stripprefix.prefixes=/editor - traefik.http.routers.swaggereditor.middlewares=strip-editor
修改后启动服务,直接访问http://127.0.0.1/ui即可打开Swagger UI,访问http://127.0.0.1/editor即可打开Swagger Editor,无需额外配置本地hosts。
内容的提问来源于stack exchange,提问作者Kérdezösködő Indián
相关产品推荐
相关产品推荐

