fix(docker): 预创建 /app/logs 属主,修复文件日志 PermissionError #16

Merged
WorkBuddy merged 1 commits from fix-log-volume-permission into main 2026-09-22 17:45:47 +08:00
Collaborator

问题(生产实测)

容器内反复出现:

PermissionError: [Errno 13] Permission denied: /app/logs/app.log
WARN src.core.log_buffer 启用文件日志失败,仅保留 stdout/内存日志

best-effort 降级按设计生效(不影响启动),但文件日志实际未启用。

根因

  • 镜像以 USER profeto(非 root)运行
  • compose 把 applogs 命名卷挂到 /app/logs,挂载点由 Docker 以 root:root 创建
  • 镜像构建时的 chown -R /app 执行时 /app/logs 尚不存在(卷是运行时挂载)→ profeto 无写权限

修复

  1. Dockerfile: 镜像内预创建 /app/logs(在既有 chown -R 之前)。命名卷为空且首次挂载时,Docker 会复制镜像内该目录的内容与属主 → 重建镜像后卷目录自动归 profeto
  2. log_buffer.py: PermissionError 单独捕获,warning 给出可操作排查方向;其余异常保持通用降级。测试 7 passed

部署操作

docker compose build api && docker compose up -d api

当前卷为空(写入一直失败,无历史数据),重建后会自动继承正确属主。验证:启动日志应出现「文件日志已启用: /app/logs/app.log」。若卷已非空仍报权限,手动兜底: docker compose exec -u root api chown -R profeto:profeto /app/logs

## 问题(生产实测) 容器内反复出现: ``` PermissionError: [Errno 13] Permission denied: /app/logs/app.log WARN src.core.log_buffer 启用文件日志失败,仅保留 stdout/内存日志 ``` best-effort 降级按设计生效(不影响启动),但文件日志实际未启用。 ## 根因 - 镜像以 USER profeto(非 root)运行 - compose 把 applogs 命名卷挂到 /app/logs,挂载点由 Docker 以 root:root 创建 - 镜像构建时的 chown -R /app 执行时 /app/logs 尚不存在(卷是运行时挂载)→ profeto 无写权限 ## 修复 1. **Dockerfile**: 镜像内预创建 /app/logs(在既有 chown -R 之前)。命名卷为空且首次挂载时,Docker 会复制镜像内该目录的内容与属主 → 重建镜像后卷目录自动归 profeto 2. **log_buffer.py**: PermissionError 单独捕获,warning 给出可操作排查方向;其余异常保持通用降级。测试 7 passed ## 部署操作 ```bash docker compose build api && docker compose up -d api ``` 当前卷为空(写入一直失败,无历史数据),重建后会自动继承正确属主。验证:启动日志应出现「文件日志已启用: /app/logs/app.log」。若卷已非空仍报权限,手动兜底: docker compose exec -u root api chown -R profeto:profeto /app/logs
WorkBuddy added 1 commit 2026-09-22 14:17:16 +08:00
生产实测: applogs 命名卷挂到 /app/logs 时挂载点由 Docker 以 root:root
创建,而非 root 进程(profeto)写入 app.log 时 PermissionError(Errno 13),
best-effort 降级生效但文件日志实际未启用。

- Dockerfile: 镜像内预创建 /app/logs 并 chown(chown -R 已有,覆盖新目录);
  命名卷为空且首次挂载时 Docker 会复制镜像目录属主,重建镜像即可修复
- log_buffer: PermissionError 单独捕获,warning 给出可操作的排查方向
  (镜像预建目录/chown/重建空卷),其余异常仍保持原通用降级
WorkBuddy merged commit 007a276fb7 into main 2026-09-22 17:45:47 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shangfangjian/Profeto#16