certifi 两个路径
Dockerfile 只向系统 Python 的 certifi 追加了 CF Origin CA 根证书,没追加虚拟环境的。导致
ping_agent()用虚拟环境 Python 时 SSL 验证失败。
1. 归属
| 问题 | 答案 |
|---|---|
| 属于哪个仓库? | 8 文件中的 Dockerfile |
| 在容器内路径? | 系统:/usr/local/lib/python3.10/site-packages/certifi/cacert.pem虚拟环境: /home/frappe/frappe-bench/env/lib/python3.10/site-packages/certifi/cacert.pem |
| 在构建链的哪一步? | Dockerfile press 阶段 RUN curl ... >> $(python3 -c "import certifi; print(certifi.where())") |
2. 功能解释
certifi 是什么?
Python 的 CA 证书包。所有 HTTPS 请求(requests 库)用它验证对方证书是否可信。
为什么需要两个路径?
Press 容器里有两套 Python:
- 系统 Python(
/usr/bin/python3,3.10) - 虚拟环境 Python(
/home/frappe/frappe-bench/env/bin/python,3.10)
两套 Python 各自有独立的 certifi 包和独立的 cacert.pem 文件。
3. 为什么会出现这个问题
我们最初只写了 RUN curl ... >> $(python3 -c "import certifi; print(certifi.where())")——python3 是系统 Python,只追加了系统的 certifi。后来发现 bench console(用虚拟环境 Python)的 ping_agent() 一直 SSL 错误。根因:虚拟环境的 certifi 没有 CF Origin CA 根证书。
4. 补丁/修改做了什么
Dockerfile press 阶段加了一条 RUN 命令,同时追加两个路径。CLAUDE.md 第 2.1 节已记录。
5. 性质判断
已解决的 bug。Dockerfile 已经修好,不是遗留问题。Press-B 直接用就行。
6. 正确做法
Dockerfile 已包含两条 certifi 追加命令。SolarFlow 直接 docker compose build 即可。
7. 影响范围
- Press 容器内所有 HTTPS 到 Agent 的请求(ping_agent、推送 Job)
- 已修复,不需要额外操作