You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建Python镜像时pip遇SSL证书验证失败问题求助

问题原因及解决方案

1. Alpine系统根证书未安装

Alpine镜像默认不包含完整的CA证书包,导致pip访问HTTPS的PyPI源时无法验证服务器证书,触发SSL: CERTIFICATE_VERIFY_FAILED错误。

解决办法:在Dockerfile中添加安装并更新根证书的步骤:

RUN apk add --no-cache ca-certificates && update-ca-certificates

2. 使用了过时的PyPI源地址

https://pypi.python.org/simple/是PyPI的旧地址,目前官方已推荐使用https://pypi.org/simple/。旧地址可能存在证书链更新不及时、路由跳转异常等问题,尤其对老版本pip不友好。

解决办法:

  • 在pip安装时指定新源:
pip install --no-cache-dir -r requirements.txt -i https://pypi.org/simple/
  • 或者在Dockerfile中配置pip全局默认源:
RUN echo "[global]\nindex-url = https://pypi.org/simple/" > /etc/pip.conf

3. Python版本环境混乱

你在Dockerfile中安装了py2-pip(Python2的pip),但又用Python3升级pip,导致容器内Python2和Python3环境混杂。Python2已停止维护,其对应的pip版本对现代SSL证书支持不足,且Flask 1.0虽兼容Python2,但旧pip访问HTTPS源时容易出问题。

解决办法:统一使用Python3环境,修改Dockerfile:

FROM alpine:latest
# 安装Python3、pip3及根证书
RUN apk add --no-cache python3 py3-pip ca-certificates && update-ca-certificates
WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
# 复制其他应用文件
COPY . .

4. WSL网络环境干扰

WSL的网络会继承Windows系统的代理、防火墙设置,可能导致容器内的HTTPS请求被拦截,无法正常获取证书链。

解决办法:

  • 暂时关闭Windows系统的代理工具,重新执行Docker构建命令
  • 构建镜像时使用--network host参数,让容器直接使用WSL的网络栈:
docker build --network host -t flask-app .
  • 检查WSL的DNS配置,确保/etc/resolv.conf中的DNS服务器能正常解析pypi.org

内容的提问来源于stack exchange,提问作者Alain Alemany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:22:41