在 Docker 中使用 pip install 时出现自签名证书错误,但仅限于某些软件包

Jos*_*vig 2 python pip docker

我只是通过一个简单的示例来对 Docker 的运行有一个基本的了解。这是我的 Docker 镜像文件:

FROM python:3.7-alpine

# copy all the files to the container
COPY . /test
WORKDIR /test

# install dependencies
RUN pip install pip_system_certs --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org
RUN pip install -r requirements.txt



# run the command
CMD ["python", "./test_script.py"]
Run Code Online (Sandbox Code Playgroud)

受信任的主机选项允许我们绕过公司网络安全设置并在 Windows 上内部安装软件包,它们似乎也适用于 Docker,但仅适用于某些软件包。例如,如果我的requirements.txt包含flask并请求一切都很好,但是pandas和numpy给我

警告:连接因“SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]”) 中断后重试(重试(total=4,connect=None,read=None,redirect=None,status=None))证书验证失败:自签名证书链中的证书 (_ssl.c:1076)'))': /simple/numpy/

并失败了。我认为这对某些软件包有效但对其他软件包无效,这很奇怪。

任何帮助表示赞赏。

在 Windows 10 中使用 Docker 桌面。

sql*_*vel 5

我知道我公司的大公司代理删除了(大多数)正常证书并将它们重新包装在自签名证书中。这给我带来了很多类似的头痛。我通过以下方式解决了它:

  • 通过访问 Chrome 中的互联网站点,单击地址栏中的锁,然后查看该站点证书的证书路径,找出我们的根证书是什么。根 CA 是我们的内部 CA。
  • 转到 Windows 控制面板中的证书管理,在“受信任的根证书”下找到我公司的内部根证书并将其导出为“Base-64 编码的 X.509”文件。
  • 将该证书文件复制到我的 Docker 容器中,并将其作为 CA 证书添加到我的容器内的“os”中。之后,我在容器中运行的所有内容都正常工作。

这里步骤 3 的问题在于,对于不同风格的 Linux,执行此操作的具体方法是不同的。我对高山不太了解,但这些链接可能会为您指明大致正确的方向: https: //blog.confirm.ch/adding-a-new-trusted-certificate-authority/
https://github。 com/gliderlabs/docker-alpine/issues/260

另外,还有一个好处 - 如果您在应用程序中使用 python 的requests库,则默认情况下它不会使用系统 CA 证书。如果这对您来说是个问题,请阅读有关在此处接受的答案中设置 REQUESTS_CA_BUNDLE 的信息:Python Requests - How to use system ca-certificates (debian/ubuntu)?