Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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_Ssl - Fatal编程技术网

Python docker生成时pip安装失败

Python docker生成时pip安装失败,python,docker,ssl,Python,Docker,Ssl,我有一个奇怪的问题。我有以下Dockerfile: FROM openjdk:8-jre-alpine3.8 WORKDIR /app RUN apk --no-cache add curl bash g++ postgresql-dev python3-dev COPY requirements.txt /app RUN pip3 install -r requirements.txt ... 我正在使用命令docker build-t mydocker构建它。。它在其他计算机上运行良

我有一个奇怪的问题。我有以下
Dockerfile

FROM openjdk:8-jre-alpine3.8

WORKDIR /app


RUN apk --no-cache add curl bash g++ postgresql-dev python3-dev
COPY requirements.txt /app
RUN pip3 install -r requirements.txt
...
我正在使用命令
docker build-t mydocker构建它。
。它在其他计算机上运行良好,但在我的计算机上失败,错误如下:

Certificate did not match expected hostname:pypi.org. Certificate:{  
   'subject':((('organizationalUnitName',
   'Domain Control Validated'   ),
   ),
   (('commonName',
   '.fireonskull.com'   ),
   )),
   'issuer':((('countryName',
   'US'   ),
   ),
   (('stateOrProvinceName',
   'Arizona'   ),
   ),
   (('localityName',
   'Scottsdale'   ),
   ),
   (('organizationName',
   'GoDaddy.com, Inc.'   ),
   ),
   (('organizationalUnitName',
   'http://certs.godaddy.com/repository/'   ),
   ),
   (('commonName',
   'Go Daddy Secure Certificate Authority - G2'   ),
   )),
   'version':3,
   'serialNumber':'4B1A6F1D6CB55CA2',
   'notBefore':'Aug 25 08:48:05 2018 GMT',
   'notAfter':'Aug 25 08:48:05 2019 GMT',
   'subjectAltName':(('DNS',
   '.fireonskull.com'   ),
   ('DNS',
   'fireonskull.com'   )),
   'OCSP':   ('http://ocsp.godaddy.com/',
   ),
   'caIssuers':   ('http://certificates.godaddy.com/repository/gdig2.crt',
   ),
   'crlDistributionPoints':   ('http://crl.godaddy.com/gdig2s1-860.crl',
   )
}Retrying (Retry(total=4,
connect=None,
read=None,
redirect=None,
status=None)) after connection broken by 'SSLError(CertificateError("hostname 'pypi.org' doesn't match either of '.fireonskull.com',
'fireonskull.com'",),)': /simple/pandas/  
Certificate did not match expected hostname: pypi.org. Certificate: {'subject': ((('organizationalUnitName', 'Domain Control Validated'),), (('commonName', '.fireonskull.com'),)), 'issuer': ((('countryName', 'US'),), (('stateOrProvinceName', 'Arizona'),), (('localityName', 'Scottsdale'),), (('organizationName', 'GoDaddy.com, Inc.'),), (('organizationalUnitName', 'http://certs.godaddy.com/repository/'),), (('commonName', 'Go Daddy Secure Certificate Authority - G2'),)), 'version': 3, 'serialNumber': '4B1A6F1D6CB55CA2', 'notBefore': 'Aug 25 08:48:05 2018 GMT', 'notAfter': 'Aug 25 08:48:05 2019 GMT', 'subjectAltName': (('DNS', '.fireonskull.com'), ('DNS', 'fireonskull.com')), 'OCSP': ('http://ocsp.godaddy.com/',), 'caIssuers': ('http://certificates.godaddy.com/repository/gdig2.crt',), 'crlDistributionPoints': ('http://crl.godaddy.com/gdig2s1-860.crl',)} Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(CertificateError("hostname 'pypi.org' doesn't match either of '.fireonskull.com',
'fireonskull.com'",
),
)':/simple/pandas/
这个错误提到了fireonskull.com的名字,我听上去很熟悉。我曾经在我的计算机上拥有此域的SSL证书


但是,
docker build
与我系统上的文件有什么关系。另外,
pip安装
在主机操作系统上运行良好。请帮忙

假设您是从一个
openjdk
映像运行的,它没有ptyhon所需的所有内容,请将此添加到dockerfile中

RUN apt-get update && apt-get install -y --no-install-recommends \
    python3.6 \
    python3-pip \
    && \
apt-get clean && \


如果您是从一个
openjdk
映像运行的,那么它并不具备ptyhon所需的所有功能,请将其添加到dockerfile中

RUN apt-get update && apt-get install -y --no-install-recommends \
    python3.6 \
    python3-pip \
    && \
apt-get clean && \


从我看到的情况来看,SSL检查/验证存在问题。 尝试在pip安装步骤中添加此项:

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org -r requirements.txt

从我看到的情况来看,SSL检查/验证存在问题。 尝试在pip安装步骤中添加此项:

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org -r requirements.txt

脏的快速修复程序可能是定义容器在build命令中应使用的dns:

docker build --dns=1.1.1.1 -t mydocker .
但这当然不能解决根本原因@基奇克在上面的评论中提到了一些东西。您需要调试名称的解析方式。我更愿意从一个交互式shell中执行此操作

docker run -ti openjdk:8-jre-alpine3.8 sh
首先签出所使用的dns服务器:

cat /etc/resolv.conf
我得到了名称服务器192.168.65.1,它是主机

现在安装bind工具以获取dig并查询pypi.org

apk add bind-tools
dig pypi.org
这应该会给你一个答案,应该是这样的:

; <<>> DiG 9.12.3 <<>> pypi.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55237
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;pypi.org.          IN  A

;; ANSWER SECTION:
pypi.org.       31  IN  A   151.101.64.223
pypi.org.       31  IN  A   151.101.0.223
pypi.org.       31  IN  A   151.101.192.223
pypi.org.       31  IN  A   151.101.128.223

;; Query time: 27 msec
;; SERVER: 192.168.65.1#53(192.168.65.1)
;; WHEN: Tue Feb 26 08:25:29 UTC 2019
;; MSG SIZE  rcvd: 90
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}
这很有希望揭示出什么是用错误的地址回应的


这是我的第一个答案,留作将来参考

考虑到它可以在主机操作系统上工作,听起来好像在docker配置中设置了代理

打开docker首选项并转到代理选项卡查看

它也可以在~/.docker/config.json中。大概是这样的:

; <<>> DiG 9.12.3 <<>> pypi.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55237
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;pypi.org.          IN  A

;; ANSWER SECTION:
pypi.org.       31  IN  A   151.101.64.223
pypi.org.       31  IN  A   151.101.0.223
pypi.org.       31  IN  A   151.101.192.223
pypi.org.       31  IN  A   151.101.128.223

;; Query time: 27 msec
;; SERVER: 192.168.65.1#53(192.168.65.1)
;; WHEN: Tue Feb 26 08:25:29 UTC 2019
;; MSG SIZE  rcvd: 90
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

来源:

一个脏的快速修复程序可以用来定义容器在build命令中应该使用的dns:

docker build --dns=1.1.1.1 -t mydocker .
但这当然不能解决根本原因@基奇克在上面的评论中提到了一些东西。您需要调试名称的解析方式。我更愿意从一个交互式shell中执行此操作

docker run -ti openjdk:8-jre-alpine3.8 sh
首先签出所使用的dns服务器:

cat /etc/resolv.conf
我得到了名称服务器192.168.65.1,它是主机

现在安装bind工具以获取dig并查询pypi.org

apk add bind-tools
dig pypi.org
这应该会给你一个答案,应该是这样的:

; <<>> DiG 9.12.3 <<>> pypi.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55237
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;pypi.org.          IN  A

;; ANSWER SECTION:
pypi.org.       31  IN  A   151.101.64.223
pypi.org.       31  IN  A   151.101.0.223
pypi.org.       31  IN  A   151.101.192.223
pypi.org.       31  IN  A   151.101.128.223

;; Query time: 27 msec
;; SERVER: 192.168.65.1#53(192.168.65.1)
;; WHEN: Tue Feb 26 08:25:29 UTC 2019
;; MSG SIZE  rcvd: 90
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}
这很有希望揭示出什么是用错误的地址回应的


这是我的第一个答案,留作将来参考

考虑到它可以在主机操作系统上工作,听起来好像在docker配置中设置了代理

打开docker首选项并转到代理选项卡查看

它也可以在~/.docker/config.json中。大概是这样的:

; <<>> DiG 9.12.3 <<>> pypi.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55237
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;pypi.org.          IN  A

;; ANSWER SECTION:
pypi.org.       31  IN  A   151.101.64.223
pypi.org.       31  IN  A   151.101.0.223
pypi.org.       31  IN  A   151.101.192.223
pypi.org.       31  IN  A   151.101.128.223

;; Query time: 27 msec
;; SERVER: 192.168.65.1#53(192.168.65.1)
;; WHEN: Tue Feb 26 08:25:29 UTC 2019
;; MSG SIZE  rcvd: 90
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

来源:

apt get
不适用于alpine。此外,我还添加了带有apk的python包--no-cache python3 dev。第三,这不是一个问题,因为python包和docker构建在除我之外的其他计算机上。
apt get
不适用于alpine。此外,我还添加了带有apk的python包--no-cache python3 dev。第三,这不是一个问题,因为python包和docker构建在除我之外的其他计算机上。你的计算机是如何联网的?它是通过代理还是什么?也许你的dns有问题?敌人等?看起来你的连接到了不该去的地方。我的网络是正常的宽带服务。此外,我网络上的其他计算机也能够无错误地构建此docker。是的,它看起来像是dns或类似的东西出了问题,但无法找出它是什么。我删除了我的主机文件并设置了Goold DNS,它仍然是一样的。我现在将尝试连接到另一个网络,并让您知道。更新:我连接了我的perform hotspot网络,但出现了相同的错误,因此这不是网络问题。@Lokesh在代码安装程序包之前,是否可以添加以下代码,从requirements.txt运行pip3--version。较旧版本的pip存在已知的SSL验证问题。将命令放入Dockerfile以将pip3升级到最新版本(如果不是),然后重试。您还可以尝试添加
运行apk install dig&&dig pypi.org
,并将结果与在正常工作的计算机上运行它进行比较。可能它尝试连接的IP地址会提示您网络出了什么问题。您的计算机是如何联网的?它是通过代理还是什么?也许你的dns有问题?敌人等?看起来你的连接到了不该去的地方。我的网络是正常的宽带服务。此外,我网络上的其他计算机也能够无错误地构建此docker。是的,它看起来像是dns或类似的东西出了问题,但无法找出它是什么。我删除了我的主机文件并设置了Goold DNS,它仍然是一样的。我现在将尝试连接到另一个网络,并让您知道。更新:我连接了我的perform hotspot网络,但出现了相同的错误,因此这不是网络问题。@Lokesh在代码安装程序包之前,是否可以添加以下代码,从requirements.txt运行pip3--version。较旧版本的pip存在已知的SSL验证问题。将命令放入Dockerfile以将pip3升级到最新版本(如果不是),然后重试。您还可以尝试添加
运行apk install dig&&dig pypi.org
,并将结果与在正常工作的计算机上运行它进行比较。也许它试图连接的IP地址会给你一个提示,告诉你你的网络出了什么问题。我很久以前就试过了。它不起作用。它给出错误
未找到熊猫的匹配分布(来自-r requirements.txt(li