无法使用 Ubuntu 在 docker 容器中安装 pip 包

新手上路,请多包涵

我正在按照 fig 指南 将 docker 与 python 应用程序一起使用,但是当 docker 开始执行命令时

RUN pip install -r requirements.txt

我收到以下错误消息:

 Step 3 : RUN pip install -r requirements.txt
 ---> Running in fe0b84217ad1
Collecting blinker==1.3 (from -r requirements.txt (line 1))
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connection aborted.', gaierror(-2, 'Name or service not known'))': /simple/blinker/

这重复了几次,然后我收到另一条消息:

 Could not find any downloads that satisfy the requirement blinker==1.3 (from -r requirements.txt (line 1))
  No distributions at all found for blinker==1.3 (from -r requirements.txt (line 1))

因此,由于某种原因,pip 无法从 docker 容器内访问任何包。我需要做些什么来允许它访问互联网吗?

但是 pip 可以很好地在 docker 容器之外安装东西,即使使用那个确切的包( blinker==1.3 )也可以正常工作,所以这不是问题。此外,此问题并非特定于该软件包。对于任何包的任何 pip install 命令,我都会遇到相同的问题。

有谁知道这里发生了什么?

原文由 Migwell 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 749
1 个回答

您的问题来自 Docker 没有使用正确的 DNS 服务器这一事实。您可以通过三种不同的方式修复它:

1. 将 Google DNS 添加到您的本地配置

修改 /etc/resolv.conf 并在末尾添加以下行

# Google IPv4 nameservers nameserver 8.8.8.8 nameserver 8.8.4.4

如果您想添加其他 DNS 服务器,请查看 此处

但是,此更改不会是永久性的(请参阅 此线程)。使其永久化: $ sudo nano /etc/dhcp/dhclient.conf 取消注释并编辑带有前缀域名服务器的行: prepend domain-name-servers 8.8.8.8, 8.8.4.4;

重启dhclient: $ sudo dhclient

2.修改Docker配置

文档中所述

在桌面上运行 Ubuntu 或 Ubuntu 衍生产品的系统通常使用 127.0.0.1 作为 /etc/resolv.conf 文件中的默认名称服务器。

指定 Docker 使用的 DNS 服务器:

 1. Log into Ubuntu as a user with sudo privileges.

2. Open the /etc/default/docker file for editing :

    $ sudo nano /etc/default/docker

3. Add the following setting for Docker.

    DOCKER_OPTS="--dns 8.8.8.8"

4. Save and close the file.

5. Restart the Docker daemon :

    $ sudo systemctl restart docker

3.运行Docker时使用参数

运行 docker 时,只需添加以下参数: --dns 8.8.8.8

原文由 Tanzaho 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题