1Panel中重建Flarum镜像导致插件丢失

环境信息

  • 面板:1Panel

  • 镜像:crazymax/flarum:1.8.10

  • Flarum:使用1panel官方应用商店一键安装的

又是什么鸟问题?

旷课了被辅导员发现了,有点暴躁 不好意思

在1panel商店更新或者重建flarum镜像后,flarum论坛插件消失

刚看了一下 docker-compose.yml 文件,默认挂载了/data 目录。

插件丢失,很有可能是安装的插件目录不在/data下,Panel 的 Flarum 应用默认只挂载了 /data 目录,而插件的核心文件存放在 vendor 和 extensions 目录,这些默认并未包含在内

    networks:
    1panel-network:
        external: true
services:
    flarum:
        container_name: ${CONTAINER_NAME}
        deploy:
            resources:
                limits:
                    cpus: ${CPUS}
                    memory: ${MEMORY_LIMIT}
        environment:
            - TZ=Asia/Shanghai
            - PUID=1000
            - PGID=1000
            - MEMORY_LIMIT=256M
            - UPLOAD_MAX_SIZE=256M
            - CLEAR_ENV=yes
            - OPCACHE_MEM_SIZE=128M
            - LISTEN_IPV6=true
            - REAL_IP_FROM=0.0.0.0/32
            - DB_HOST=${PANEL_DB_HOST}
            - DB_PORT=${PANEL_DB_PORT}
            - DB_NAME=${PANEL_DB_NAME}
            - DB_USER=${PANEL_DB_USER}
            - DB_PASSWORD=${PANEL_DB_USER_PASSWORD}
            - DB_PREFIX=${PANEL_DB_PREFIX}
            - DB_NOPREFIX=false
            - DB_TIMEOUT=60
            - FLARUM_BASE_URL=${FLARUM_EXTERNAL_URL}
        image: crazymax/flarum:1.8.10
        labels:
            createdBy: Apps
        networks:
            - 1panel-network
        ports:
            - ${HOST_IP}:${PANEL_APP_PORT_HTTP}:8000
        restart: always
        volumes:
            - ./data:/data #重点在这里 你看 他只持久化了data目录

但 Flarum 的插件实际存放在容器内的 /opt/flarum/ 下:

容器内目录结构:

/

├── data/                    ← 已持久化(用户数据、帖子、配置)

└── opt/

    └── flarum/

        ├── composer.json    ← 插件清单(未持久化)

        ├── composer.lock    ← 插件版本锁(未持久化)

        ├── vendor/          ← 插件核心代码(未持久化)⚠️

        └── extensions/      → 软链接 → /data/extensions(已持久化)✅

一些发现:

extensions/ 目录好像是软链接,指向 /data/extensions,已经持久化了,不需要再额外处理,这里我其实是有疑问的,为啥?

真正需要持久化的是 vendor/composer.jsoncomposer.lock

解决步骤

第一步:备份现有数据

# 备份整个应用目录 如果目录不同、记得替换为你的应用目录

cp -r /opt/1panel/apps/flarum /opt/1panel/apps/flarum_backup_$(date +%Y%m%d)

第二步:确认容器名和目录

# 我先看看容器名
docker ps | grep flarum
# 我看看先、确认应用目录 
ls /opt/1panel/apps/flarum/flarum/

第三步:从容器复制关键文件到宿主机

CONTAINER=1Panel-flarum-TESe          # 兄弟记得替换为你的容器名
APP_DIR=/opt/1panel/apps/flarum/flarum  # 记得替换为你的应用目录

# 复制插件清单

docker cp $CONTAINER:/opt/flarum/composer.json $APP_DIR/
docker cp $CONTAINER:/opt/flarum/composer.lock $APP_DIR/

# 复制插件核心代码
docker cp $CONTAINER:/opt/flarum/vendor $APP_DIR/

⚠️ 注意extensions 不需要复制,它是软链接,已经通过 /data 持久化了。

第四步:验证文件已复制

ls /opt/1panel/apps/flarum/flarum/
# 应该看到:composer.json  composer.lock  data  data.yml  docker-compose.yml  vendor

第五步:修改 docker-compose.yml

# 先备份原文件

cp $APP_DIR/docker-compose.yml $APP_DIR/docker-compose.yml.bak

# 追加新的挂载配置

cat >> $APP_DIR/docker-compose.yml << 'EOF'

            - ./vendor:/opt/flarum/vendor

            - ./composer.json:/opt/flarum/composer.json

            - ./composer.lock:/opt/flarum/composer.lock

EOF

修改后的 volumes 部分应该是这样:

volumes:

    - ./data:/data                               # 原有,不动

    - ./vendor:/opt/flarum/vendor                # 新增

    - ./composer.json:/opt/flarum/composer.json  # 新增

    - ./composer.lock:/opt/flarum/composer.lock  # 新增

第六步:去GUI重建容器验证

我自己测试的 没问题了 插件都还在,但是我是同版本重建哈,如果需要更新请备份!

原理说明

composer.jsoncomposer.lock 是插件的配方:

# 有了这两个文件,任何时候都能完整还原所有插件
# 官方的 docker-compose没有持久化插件 配方 和 目录 所以你重建或者更新 插件就会消失,但是我发现一般插件数据都是存在数据库的,你也不用担心
# 确实丢失了重新给插件一个一个install回来就好了

composer install  # 如果你备份了composer.json 和 composer.lock 可以根据 lock 文件精确还原安装


# vendor/ 是插件的"实体",直接挂载可以跳过重新下载的过程,恢复最快。



1Panel中重建Flarum镜像导致插件丢失
https://wlw301.top//archives/CvPnqJPk
作者
ShoKo.
发布于
2026年04月30日
更新于
2026年04月30日
许可协议