如何通过Traefik使用子目录让Firefly Docker容器本地可访问
问题排查与修复方案
你的配置存在几个关键问题导致404错误,以下是具体修复步骤:
1. 修正Firefly数据库连接配置
在firefly.env中,DB_HOST被设置为db,但你的数据库容器名是fireflydb,这会导致Firefly无法找到数据库服务,进而引发应用启动异常。修改为:
DB_HOST=fireflydb
2. 配置Traefik路径前缀转发中间件
你使用Path(/firefly)作为路由规则,但Firefly III默认监听根路径/,无法处理/firefly开头的请求。需要添加Traefik的路径重写中间件,将请求前缀去掉后再转发给Firefly容器。
修改docker-compose.yml中firefly服务的labels:
labels: - "traefik.enable=true" - "traefik.http.routers.firefly.rule=Host(`localhost`) && PathPrefix(`/firefly`)" - "traefik.http.routers.firefly.entrypoints=web" - "traefik.http.routers.firefly.middlewares=firefly-stripprefix" - "traefik.http.middlewares.firefly-stripprefix.stripprefix.prefixes=/firefly" - "traefik.http.services.firefly.loadbalancer.server.port=80"
这里将Path改为PathPrefix(匹配所有以/firefly开头的请求),并添加stripprefix中间件自动移除路径前缀。
3. 移除Firefly容器不必要的端口暴露
Firefly服务已通过Traefik代理,无需直接暴露80端口,删除firefly服务中的ports: - 80配置,避免端口冲突或不必要的暴露。
修改后的完整配置
docker-compose.yml
version: "3.3" networks: traefik: firefly: services: traefik: image: "traefik:latest" container_name: traefik command: - "--log.level=DEBUG" - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" networks: - traefik ports: - "80:80" - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" firefly: image: fireflyiii/core:latest container_name: firefly labels: - "traefik.enable=true" - "traefik.http.routers.firefly.rule=Host(`localhost`) && PathPrefix(`/firefly`)" - "traefik.http.routers.firefly.entrypoints=web" - "traefik.http.routers.firefly.middlewares=firefly-stripprefix" - "traefik.http.middlewares.firefly-stripprefix.stripprefix.prefixes=/firefly" - "traefik.http.services.firefly.loadbalancer.server.port=80" restart: always networks: - traefik - firefly volumes: - firefly_iii_upload:/var/www/html/storage/upload env_file: firefly.env depends_on: - fireflydb fireflydb: image: mariadb container_name: fireflydb restart: always networks: - firefly env_file: fireflydb.env volumes: - firefly_iii_db:/var/lib/mysql volumes: firefly_iii_upload: firefly_iii_db:
修正后的firefly.env关键配置
DB_HOST=fireflydb
测试访问
修改完成后,重启所有容器:
docker-compose down && docker-compose up -d
等待容器启动完成后,访问http://localhost/firefly即可正常打开Firefly III界面。
内容的提问来源于stack exchange,提问作者Letouane
相关产品推荐
相关产品推荐

