我已经跳了一段时间解决了这个问题,我似乎无法使它正常工作。我有一个泊坞窗容器,在其中设置了用于机器学习的nvidia映像。我安装了所有python依赖项。然后,我开始安装pip软件包。我收到第一个错误:
requests.exceptions.SSLError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),))
很简单,我有一个certificate
来处理Cisco的保护伞。然后,我可以轻松便捷地安装所有软件包。但是,为了能够安装最新的软件包,我需要升级pip,并且升级工作正常。点升级到20.2.3
之后,我突然又收到错误消息:
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)) - skipping
然后我在Google周围搜索并尝试了偶然发现的建议:
定时
我发现系统时间错了-它适用于最初的pip版本,这很奇怪。但是,更改时间并不能解决问题。
conf
我添加了一个带有全局标签的pip.conf
文件,用于受信任的主机和证书。仍然存在相同的错误。
点安装
我尝试使用其他受信任的主机标志以及cert标志,如果我正确理解的话,应该已经从conf文件中指定了它。但是,这两种方法都无效。
做什么
我现在有点不知所措,在容器中安装证书使我可以在升级到pip 9.0.1
之后使用pip 20.2.3
(系统中的默认值)安装软件包。我无法使其与任何软件包一起使用。我尝试了多个pip版本-但升级后,我失去了尝试用重新安装它的证书
ADD Cisco_Umbrella_Root_CA.cer /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt
RUN chmod 644 /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt
RUN update-ca-certificates --fresh
任何人都知道这种情况如何发生吗?
更新
卷曲
RUN curl -v -k -H"Host; files.pythonhosted.org" https://files.pythonhosted.org/packages/8a/fd/bbbc569f98f47813c50a116b539d97b3b17a86ac7a309f83b2022d26caf2/Pillow-6.2.2-cp36-cp36m-manylinux1_x86_64.whl
---> Running in ac095828b9ec
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying ::ffff:146.112.56.166...
* TCP_NODELAY set
* Connected to files.pythonhosted.org (::ffff:146.112.56.166) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [85 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3177 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [262 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
从最后一行可以看出,他们不同意协议,并且通信失败
答案 0 :(得分:1)
前段时间,我遇到了类似的问题。对我来说,解决方案是在一个docker层中添加证书并安装依赖项。
我不知道您的Dockerfile的外观如何,但是我会尝试这样的事情:
ADD Cisco_Umbrella_Root_CA.cer /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt
RUN chmod 644 /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt && \
update-ca-certificates --fresh && \
pip install --upgrade pip setuptools && \
pip install -r production.txt && \
rm /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt # for extra safety
我该怎么做:
RUN mkdir -p -m 0600 ~/.ssh/ && \
ssh-keyscan <my host> >> ~/.ssh/known_hosts && \
eval `ssh-agent -s` && \
ssh-add <ssh key> && \
echo "Installing packages from pip. It might take a few minutes..." && \
pip install --upgrade pip setuptools && \
pip install -r production.txt && \
rm <ssh key>
ssh密钥已经是来自另一层的chmod 400 <ssh key>
。
另外,请确保
apt update
和apt install -y ca-certificates
或apt upgrade
答案 1 :(得分:1)
答案和我的问题中建议的步骤绝对是应该尝试的步骤。如果有人像我一样无法使其正常工作,那么在此特定情况下,是由IT组织将信息设置为代理,并且不支持ssl扫描/解密。
答案 2 :(得分:0)
对于docker构建docker问题,您确实需要显示大部分dockerfile。
上面的细节似乎表明docker文件应该具有
FROM nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04
RUN set -ex \
&& apt update \
&& apt upgrade \
&& apt install -y curl python-pip
&& pip install --upgrade pip setuptools
没有dockerfile,没有起点,唯一可以给出的答案是“您似乎有网络问题”。当我尝试上述方法时,一切正常。
使用容器中的Curl,我收到的ssl证书是
* Server certificate:
* subject: C=US; ST=California; L=San Francisco; O=Fastly, Inc; CN=r.ssl.fastly.net
* start date: Jul 20 18:19:08 2020 GMT
* expire date: Apr 28 19:20:25 2021 GMT
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign CloudSSL CA - SHA256 - G3
该证书是大多数系统应具有的库存。您可以使用openssl解释结果。
在添加Cisco_Umbrella_Root_CA.cer
时,您正在通过公司代理进行代理。请参见Cisco Umbrella Root Certificate,否则无需添加该证书。 “在我的私人PC上进行了无任何问题的测试”告诉您这是环境。
您始终可以运行docker run -it nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04
来在容器上获取外壳,然后开始手动运行Dockerfile
中的命令。当事情破裂时,请回到linux故障排除。毕竟,您处于类似Ubuntu的环境中