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)
  • 已修复,不需要额外操作