Docker课程教程,python pip失败



我正在按照 https://docker-curriculum.com/中的教程生成我的第一个Docker映像。在第 2.4 节中,我们学习如何使用基本映像python:3-onbuild配置一个简单的 Dockerfile,该将自动运行 pip 并从requirements.txt安装依赖项。

问题是当我尝试构建 docker 时,包根本无法加载:

mgitt@mgpc:~/workspace/docker-curriculum/flask-app$ docker build -t prakhar1989/catnip .
Sending build context to Docker daemon  8.704kB
Step 1/3 : FROM python:3-onbuild
# Executing 3 build triggers...
Step 1/1 : COPY requirements.txt /usr/src/app/
 ---> Using cache
Step 1/1 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Running in 74c4e94fa1ba
Collecting Flask (from -r requirements.txt (line 1))
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fc6592831d0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',)': /simple/flask/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fc659283cc0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',)': /simple/flask/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fc659283208>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',)': /simple/flask/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fc659283470>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',)': /simple/flask/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fc659283ba8>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',)': /simple/flask/
  Could not find a version that satisfies the requirement Flask (from -r requirements.txt (line 1)) (from versions: )
No matching distribution found for Flask (from -r requirements.txt (line 1))
The command '/bin/sh -c pip install --no-cache-dir -r requirements.txt' returned a non-zero code: 1
mgitt@mgpc:~/workspace/docker-curriculum/flask-app$ 

我已经看了一下这个堆栈溢出解决方案。这些答案似乎已经解决了许多人无法与域名服务器 (DNS) 连接的问题,但重置 docker 或将 DNS 添加到/etc/dhcp/dhclient.conf对我没有任何帮助。

我安装了 Docker 版本17.09.0-ce并在 Ubuntu 16.04上运行,有什么想法吗?

如果您

正在使用代理。docker 容器很有可能根本无法访问互联网。

您可以通过运行来测试这一点

$ docker run -it busybox sh
/ # ping google.com

如果它挂起,你就知道你有问题。现在我们必须找到您的主机用于连接到互联网的网络接口。 ipconfig会给你一个名字列表,哪个用于连接到互联网就是你的IFACENAME。现在运行:

$ nmcli dev list | grep 'IP4.DNS'                    # Ubuntu <= 14
$ nmcli device show IFACENAME | grep IP4.DNS         # Ubuntu >= 15

这将列出代理服务器所在的IP_ADDRESS。可能不止 1 个,只需使用第一个即可。使用以下内容创建文件/etc/docker/daemon.json

{
    "dns": ["IP_ADDRESS", "8.8.8.8"]
}

最后

$ sudo service docker restart

您现在应该能够从容器内执行 ping 操作。

最新更新