Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Docker中安装pip时出现自签名证书错误,但仅适用于某些软件包_Python_Docker_Pip - Fatal编程技术网

Python 在Docker中安装pip时出现自签名证书错误,但仅适用于某些软件包

Python 在Docker中安装pip时出现自签名证书错误,但仅适用于某些软件包,python,docker,pip,Python,Docker,Pip,我只是用一个简单的例子来了解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

我只是用一个简单的例子来了解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"]
可信主机选项使我们能够绕过公司网络安全设置,在windows内部安装软件包,它们似乎也可以在Docker中工作,但仅适用于某些软件包。例如,如果my requirements.txt包含烧瓶和请求,则一切正常,但pandas和numpy会给我

警告:正在重试(重试(总计=4,连接=无,读取=无, 连接被断开后重定向=无,状态=无 'SSLError(SSLCertVerificationError(1),[SSL: 证书\u验证\u失败]证书验证失败:自签名 证书链中的证书(_ssl.c:1076)'):/simple/numpy/

失败了。我认为这是奇怪的,这是工作的一些包,而不是其他

谢谢你的帮助


在Windows10中使用Docker桌面

我知道我公司的大公司代理会删除(大多数)普通证书,并将它们重新包装到一个自签名证书中。这给我带来了很多类似的麻烦。我通过以下方式解决了这一问题:

  • 通过访问Chrome中的一个互联网站点,点击地址栏上的锁,查看站点证书的认证路径,了解我们的根证书是什么。根CA是我们内部的一个
  • 转到Windows控制面板中的证书管理,在“受信任的根证书”下找到我公司的内部根证书,并将其导出为“Base-64编码的X.509”文件
  • 将该证书文件复制到我的Docker容器中,并将其作为CA证书添加到容器中的“os”中。在那之后,我在容器中运行的所有东西都正常工作了
第3步的关键在于,对于不同风格的linux,具体的操作方式是不同的。我对阿尔卑斯山了解不多,但这些链接可能会让您大致了解正确的方向:


另外,还有一个额外的问题——如果您在应用程序中使用python的请求库,那么默认情况下它不会使用系统CA证书。如果这对您来说是一个问题,请在此处阅读关于在接受的答案中设置请求\u CA\u BUNDLE的内容:

我知道我公司的大型公司代理会删除(大多数)普通证书,并将其重新包装到自签名证书中。这给我带来了许多类似的麻烦。我通过以下方式解决了这一问题:

  • 通过访问Chrome中的一个互联网站点,点击地址栏上的锁,查看站点证书的认证路径,了解我们的根证书是什么。根CA是我们内部的一个
  • 转到Windows控制面板中的证书管理,在“受信任的根证书”下找到我公司的内部根证书,并将其导出为“Base-64编码的X.509”文件
  • 将该证书文件复制到我的Docker容器中,并将其作为CA证书添加到容器中的“os”中。在那之后,我在容器中运行的所有东西都正常工作了
第3步的关键在于,对于不同风格的linux,具体的操作方式是不同的。我对阿尔卑斯山了解不多,但这些链接可能会让您大致了解正确的方向:


另外,还有一个额外的问题——如果您在应用程序中使用python的请求库,那么默认情况下它不会使用系统CA证书。如果这对您来说是一个问题,请阅读此处接受的答案中关于设置请求\u CA\u捆绑包的内容:

您说的“将该证书文件复制到我的Docker容器”是什么意思?您已将证书的安装添加到Dockerfile?@madhat1-上面步骤的结果是将证书导出为“Base-64编码的X.509”文件。假设您将其保存为本地驱动器上的“my_cert.pem”。现在您需要某种方法从Docker容器中引用“my_cert.pem”文件-最简单的方法是使用Docker文件中的copy命令将文件复制到Docker容器中。既然证书文件在Docker容器中,您需要告诉容器中的“操作系统”信任它。这超出了这个答案的范围,因为它有点依赖操作系统。请参阅我作为开始包含的链接。你说“将该证书文件复制到我的Docker容器”是什么意思?您已将证书的安装添加到Dockerfile?@madhat1-上面步骤的结果是将证书导出为“Base-64编码的X.509”文件。假设您将其保存为本地驱动器上的“my_cert.pem”。现在您需要某种方法从Docker容器中引用“my_cert.pem”文件-最简单的方法是使用Docker文件中的copy命令将文件复制到Docker容器中。既然证书文件在Docker容器中,您需要告诉容器中的“操作系统”信任它。这超出了这个答案的范围,因为它有点依赖操作系统。请参阅我作为起点提供的链接。