From edfd6e476512c12c8e01c4242943faae423643f5 Mon Sep 17 00:00:00 2001 From: huangjianwu Date: Fri, 22 May 2026 13:30:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker):=20=E9=A2=84=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E9=95=9C=E5=83=8F=E6=8C=81=E4=B9=85=E5=8C=96=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93/=E7=AC=94=E8=AE=B0=EF=BC=8C=E4=BF=AE=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E4=B8=A2=E9=85=8D=E7=BD=AE=E4=B8=8E=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit README 的 docker run 只挂了 -v …:/app/backend/data(仅媒体缓存),但 SQLite 库在 /app/backend/bili_note.db、笔记在 /app/backend/note_results 都不在该卷下 → 用户删容器重建(如 docker pull 升级镜像)会丢失 LLM 供应商配置和全部笔记历史。 - Dockerfile.complete:DATABASE_URL 重定向到 /app/backend/data/bili_note.db、 NOTE_OUTPUT_DIR 改到 data/note_results,并预建 /app/backend/data 目录; 两条 supervisord environment 行同步(兜底默认值 + %(ENV_*)s 透传)。 - README:docker run 改挂 data(库+笔记)/ config(供应商·Cookie·转写配置)/ static(截图)/ models(模型缓存,可选)四个数据卷,并警告不要挂整个 /app/backend(命名卷会固化镜像内代码,导致 docker pull 升级不生效)。 - docker-build.yml:同步发布说明里 echo 的 run 命令。 截图仍留在 /app/backend/static(static_dir 硬编码服务,不能重定向),单独挂卷。 Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/docker-build.yml | 3 +++ Dockerfile.complete | 8 +++++--- README.md | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 73d4571..0446760 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -66,6 +66,9 @@ jobs: echo "Run the container:" echo " docker run -d -p 80:80 \\" echo " -v bilinote-data:/app/backend/data \\" + echo " -v bilinote-config:/app/backend/config \\" + echo " -v bilinote-static:/app/backend/static \\" + echo " -v bilinote-models:/app/backend/models \\" echo " --name bilinote \\" echo " ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" echo "" diff --git a/Dockerfile.complete b/Dockerfile.complete index 4ad647e..3102be4 100644 --- a/Dockerfile.complete +++ b/Dockerfile.complete @@ -95,14 +95,16 @@ COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf # 在 [supervisord] 块用 environment= 设兜底默认值;在 [program:backend] 用 # %(ENV_*)s 显式引用,等价于「把 host 通过 docker run -e 或 env_file 传进来的 # 变量再透传给 python main.py」。漏掉这一步就是用户「改 .env 没反应」的根因。 -RUN mkdir -p /var/log/supervisor +# /app/backend/data 用于持久化数据库与笔记(见下方 DATABASE_URL / NOTE_OUTPUT_DIR), +# 预建好目录,避免不挂卷启动时 sqlite 因父目录不存在而创建库失败。 +RUN mkdir -p /var/log/supervisor /app/backend/data COPY < ⚠️ **不要**用 `-v 卷名:/app/backend` 挂整个后端目录——命名卷会用首次启动时的镜像内容固化,之后 `docker pull` 升级也会被旧代码盖住,导致「升级不生效」。只挂上面这些数据子目录即可。 + 访问:`http://localhost` 也可以使用 docker-compose 本地构建: @@ -302,10 +309,17 @@ docker pull ghcr.io/jefferyhcool/bilinote:latest # 运行容器 docker run -d -p 80:80 \ -v bilinote-data:/app/backend/data \ + -v bilinote-config:/app/backend/config \ + -v bilinote-static:/app/backend/static \ + -v bilinote-models:/app/backend/models \ --name bilinote \ ghcr.io/jefferyhcool/bilinote:latest ``` +上面四个卷分别持久化:`data`(SQLite 数据库 + 生成的笔记)、`config`(LLM 供应商配置 / Cookie / 转写设置)、`static`(笔记引用的视频截图)、`models`(Whisper 模型缓存,可选,避免每次重新下载)。这样 `docker pull` 升级新镜像、删旧容器重建后,配置和历史都不会丢。 + +> ⚠️ **不要**用 `-v 卷名:/app/backend` 挂整个后端目录——命名卷会用首次启动时的镜像内容固化,之后 `docker pull` 升级也会被旧代码盖住,导致「升级不生效」。只挂上面这些数据子目录即可。 + 访问:`http://localhost` 也可以使用 docker-compose 本地构建: