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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:35:23