Post
Docker Compose部署OpenCVE与Airflow:权限配置与问题排查指南
OpenCVE 与 Airflow 在 Docker Compose 环境下的部署实践
概述
本文基于 OpenCVE 官方部署文档的真实部署经验,系统梳理 OpenCVE 与 Apache Airflow 在 Docker Compose 场景下的部署配置要点、Git 权限处理方案及常见问题解决方案。重点解决因 Git 安全策略与文件系统权限导致的系统稳定性问题。
核心组件构成
部署架构包含以下核心组件:
- OpenCVE:由 Django Web 服务与 CVE 数据处理 Worker 组成
- Apache Airflow:负责任务调度,包含 Webserver、Scheduler 与 opencve DAG
- 基础服务:PostgreSQL(数据存储)与 Redis(缓存)
- Git 数据仓库:包含 vulnrichment、cve-data、rules 三个关键仓库
部署关键配置原则
1. Airflow 容器用户权限配置
强制要求:禁止使用 root 用户运行 Airflow 容器
airflow-scheduler:
image: apache/airflow:2.x
user: "${AIRFLOW_UID:-50000}:0"
原因:
- Airflow 官方推荐非 root 用户运行
- Git 安全策略在 root 权限下更容易触发异常
- 非 root 环境下文件权限问题更易排查
2. Git 仓库挂载规范
强制要求:使用 bind mount 挂载 Git 仓库目录
volumes:
- ./repositories:/home/airflow/repositories
禁用路径:
/root/.../opt/.../tmp/...
初始化配置流程
1. 一次性初始化操作(仅需执行一次)
步骤说明:
- 进入 Airflow 容器(需 root 权限)
docker compose exec --user root airflow-scheduler bash - 配置 Git 安全目录(Git ≥ 2.35 必须)
git config --global --add safe.directory /home/airflow/repositories # 或更严格限制 git config --global --add safe.directory /home/airflow/repositories/vulnrichment - 修复 Git 仓库写权限(容器内执行)
chown -R airflow:0 /home/airflow/repositories chmod -R u+rwX /home/airflow/repositories - 验证权限是否生效
su airflow cd /home/airflow/repositories/vulnrichment git fetch
常见问题与解决方案
1. dubious ownership in repository 错误
错误特征:
fatal: detected dubious ownership in repository
解决方案:
git config --global --add safe.directory /home/airflow/repositories
2. .git/FETCH_HEAD: Permission denied
错误特征:
error: cannot open '.git/FETCH_HEAD': Permission denied
根本原因:
- airflow 用户缺少写权限
- Git fetch 需要写入
.git/FETCH_HEAD
解决方案:
在容器内执行:
chown -R airflow:0 /home/airflow/repositories
chmod -R u+rwX /home/airflow/repositories
3. DAG 显示失败但日志显示成功
现象描述:
DAG 状态显示失败,但任务日志显示执行成功
原因分析:
- 前序任务或历史运行失败导致 DAG 状态异常
- 不是 DAG 文件本身的问题
解决方案:
- 通过 Airflow UI 执行 Clear Task / Clear DAG Run
- 或重新触发完整 DAG 执行
4. 是否需要删除 opencve DAG?
结论:❌ 不需要
原因:
- DAG 仅定义任务逻辑,问题根源在文件系统/Git 权限
- 删除 DAG 无法解决根本问题
生产环境优化建议
1. 降低 Git 操作频率
推荐方案:
- 由单个 DAG 统一执行
git fetch - 后续任务使用本地数据,避免重复拉取
2. 实施最小权限原则
- 仅对需要更新的仓库开放写权限
- 其余仓库设置为只读模式
3. 初始化脚本化
建议在 Airflow 容器启动脚本中添加:
git config --global --add safe.directory /home/airflow/repositories
chown -R airflow:0 /home/airflow/repositories
chmod -R u+rwX /home/airflow/repositories
目的:避免新环境重复踩坑
注意事项
- 本方案基于 Git ≥ 2.35 的安全策略特性
- PostgreSQL 与 Redis 的配置需参考
container-database概念文档 - Git 权限问题可能与
ssl-certificate-management中的 Git 配置存在关联