如何解决Jupyter Notebook Docker镜像安装自签名证书不生效问题
Jupyter Notebook Docker镜像安装自签名证书解决方案
问题根因
你遇到的证书不识别问题,是官方jupyter/datascience-notebook镜像的特殊设计导致的:该镜像预装了Miniconda运行环境,包括Python、curl在内的绝大多数用户态工具会优先读取conda环境内置的CA证书 bundle,而非系统级的/etc/ssl/certs路径下的证书。你之前的操作仅更新了系统证书存储,没有同步到conda的证书体系,因此访问内部HTTPS服务时会校验失败。
正确安装流程
完整的证书安装需要同时覆盖系统存储和conda环境存储,同时配置全局环境变量避免个别HTTP库走默认证书路径,以下是修改后的Dockerfile:
FROM jupyter/datascience-notebook:notebook-6.4.2 USER root # 配置代理(保留你原有的代理配置) RUN echo 'Acquire::http::proxy "http://proxy.internal.server";' >> /etc/apt/apt.conf.d/99proxy ENV http_proxy http://proxy.internal.server ENV https_proxy http://proxy.internal.server ENV NO_PROXY internal.server,localhost,127.0.0.1 # 第一步:安装证书到系统存储 COPY certificates/* /usr/local/share/ca-certificates/ RUN update-ca-certificates # 第二步:同步系统证书到conda环境的CA证书 bundle RUN cat /etc/ssl/certs/ca-certificates.crt >> ${CONDA_DIR}/ssl/cacert.pem # 第三步:配置全局环境变量,指定所有HTTP工具优先使用更新后的证书 ENV REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt # 切回默认的jupyter用户,避免运行时权限问题 USER ${NB_UID}
验证方法
构建镜像后启动容器,执行以下两个操作验证配置生效:
- 系统工具验证:执行
curl -O https://internal.server/file,无需添加-k参数即可正常拉取文件 - Python环境验证:在Jupyter Notebook中执行以下代码无SSL报错即可
import requests resp = requests.get("https://internal.server/file") print(resp.status_code)
内容的提问来源于stack exchange,提问作者Hong Ooi
相关产品推荐
相关产品推荐

