在docker构建时pip安装失败

2024-04-26 15:15:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个奇怪的问题。我有以下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 .构建它。它在其他计算机上运行良好,但在我的计算机上失败,错误如下:

^{pr2}$

这个错误提到了名称fireonskull.com,这听起来很熟悉。我曾经在我的计算机上有这个域的SSL证书。在

但是docker build与我系统上的文件有什么关系呢。另外,pip install在主机操作系统上也可以正常工作。请帮忙!在


Tags: installdockerrunfromdevdockerfilebuildtxt
3条回答

假设您是从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

一个脏的快速修复程序可能是定义容器应该在构建命令中使用的dn:

docker build  dns=1.1.1.1 -t mydocker .

但这当然不能解决根本原因。@基奇克在上面的评论中提到了一些事情。您需要调试名称的解析方式。我更喜欢在交互式shell中这样做。在

^{pr2}$

首先检查使用的dns服务器:

^{3}$

我得到nameserver 192.168.65.1,它是主机

现在安装bind工具来获取挖掘和查询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

很可能你的答案会告诉你dns没有正确解析。要获取有关如何解析域的更多信息,请使用dig的+trace选项

dig +trace pypi.org

这将有望揭示出什么回复地址错误。在


这是我的第一个答案,留这里备查

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

打开docker首选项并转到“代理”选项卡查看。在

Docker proxy settings

它也可能在你的~/.docker中/配置.json. 像这样:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

来源:https://docs.docker.com/network/proxy/

相关问题 更多 >