From bb92e0ec05e49b2589d7d6a9b6701c957e4db223 Mon Sep 17 00:00:00 2001 From: Gundy Date: Fri, 3 Jul 2026 10:46:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker):=20=E5=9B=BA=E5=AE=9A=20DATA=5FDIR?= =?UTF-8?q?=20=E5=AE=B9=E5=99=A8=E8=B7=AF=E5=BE=84,=20=E9=98=B2=20.env=20?= =?UTF-8?q?=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84=E8=A6=86=E7=9B=96=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E6=95=B0=E6=8D=AE=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit .env 里 DATA_DIR=./data(为开发模式设计)经 env_file 传入容器后, 覆盖了 Dockerfile 里的 ENV DATA_DIR=/app/data。config.py 的 _project_root() 按 backend/app/config.py 三层父目录推算项目根, 但 Docker 里 COPY backend/app ./app 抹掉了 backend 这层, 文件实际 落在 /app/app/config.py, 三层父目录数到了 /(而非 /app), 相对路径 ./data 被解析成 /data —— 不在 docker-compose 挂载的 ./data:/app/data 范围内, 容器可写层不持久化, 每次 up --build 重建都会清空。 compose 的 environment 优先级高于 env_file, 显式固定 DATA_DIR 为 容器内绝对路径, 使其不受 .env 内容影响, 与 Dockerfile 原本的 「显式指定三个关键路径」意图保持一致。 --- docker-compose.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 0399a4e..c1fb2cc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,12 @@ services: - "${PORT:-3018}:3018" env_file: - .env + environment: + # 强制固定为容器内绝对路径, 防止 .env 里的 DATA_DIR=./data(开发模式用) + # 被 env_file 原样传入容器后按错误的相对路径解析, 写到未挂载卷的目录, + # 导致每次 up --build 重建容器都丢数据。environment 优先级高于 env_file, + # 无论 .env 怎么写这里都以容器路径为准。 + - DATA_DIR=/app/data volumes: - ./data:/app/data - ./tiers.yaml:/app/tiers.yaml:ro