我正在跟随fig guide使用带有python应用程序的docker,但是当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
命令都会出现同样的问题。
有谁知道这里发生了什么?
答案 0 :(得分:47)
你的问题来自于Docker没有使用正确的DNS服务器。 您可以通过三种不同的方式解决它:
修改/etc/resolv.conf并在末尾添加以下行
webpack.ProvidePlugin()
如果您想添加其他DNS服务器,请查看here。
但是,此更改不会是永久性的(请参阅this thread)。使它永久化:
# Google IPv4 nameservers
nameserver 8.8.8.8
nameserver 8.8.4.4
使用prepend domain-name-server取消注释并编辑该行:
$ sudo nano /etc/dhcp/dhclient.conf
重新启动dhclient:prepend domain-name-servers 8.8.8.8, 8.8.4.4;
。
在桌面上运行Ubuntu或Ubuntu衍生产品的系统通常在/etc/resolv.conf文件中使用127.0.0.1作为默认名称服务器。
指定供Docker使用的DNS服务器:
$ sudo dhclient
运行泊坞窗时,只需添加以下参数: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
答案 1 :(得分:15)
好的,重新启动我的docker-machine正在解决问题。谢谢 - ismailsunni
这是我的解决方案:
docker-machine restart <machine-name>
答案 2 :(得分:15)
我有同样的问题,它困扰了我一段时间,我在网上尝试了很多解决方案,但无济于事。但是我最终解决了它如下:
Ubuntu 16.04
docker Server 18.03.0-ce
运行以下命令,发现DNS服务器的地址:
$: nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 192.168.210.2
在/etc/docker/daemon.json.
创建一个泊坞窗配置文件(,如果您还没有),并将以下内容添加到该文件中:
{
"dns": ["192.168.210.2", "8.8.8.8"]
}
阵列的第一项是您网络的DNS服务器,第二项是谷歌的DNS服务器,如果您的网络的DNS不可用,则作为后备。
保存文件,然后重新启动docker服务
$: sudo service docker restart
答案 3 :(得分:9)
对我来说,只需重新启动docker daemon帮助。
service docker restart
答案 4 :(得分:7)
您需要在docker config
中添加新的DNS地址sudo nano /lib/systemd/system/docker.service
在ExecStar之后添加dns。
--dns 10.252.252.252 --dns 10.253.253.253
看起来应该是这样的:
ExecStart=/usr/bin/dockerd -H fd:// --dns 10.252.252.252 --dns 10.253.253.253
然后做:
systemctl daemon-reload
sudo service docker restart
应该工作。
答案 5 :(得分:5)
就我而言,在docker version 1.13.0
下docker-machine 0.9.0
和Ubuntu 16.04
,我必须稍微修改一下Tanzaho的答案(2.修改Docker配置),如下所示:
以具有sudo权限的用户身份登录Ubuntu。
打开/ etc / default / docker文件进行编辑:
sudo vim /etc/default/docker
为Docker添加以下设置。
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
保存并关闭文件。
重启Docker守护程序:
sudo service docker restart
答案 6 :(得分:5)
对我来说,由于Docker的DNS配置不正确,我无法安装pip。我已经尝试了上述步骤,但是,将docker DNS配置为Google DNS对我的笔记本电脑不起作用。仅当我将其DNS设置为笔记本电脑的已分配IP时,才能正确配置Docker的DNS。
如果您使用Ubuntu,您可以使用以下步骤配置docker的DNS:
找出您设备的已分配IP。您可以通过
找到这个ifconfig
nmcli dev show | grep 'DNS'
在/etc/docker/daemon.json
中编辑dns(如果以前不存在,请创建此文件)
{
"dns": ["your_ip_in_step_1"]
}
重新启动docker:sudo service docker restart
答案 7 :(得分:3)
我需要在我的docker build命令中添加--network = host:
=
答案 8 :(得分:3)
作为一名Docker新手,当我按照Docker教程时,我遇到了一个以这种方式表现出来的问题:
https://docs.docker.com/get-started/part2
我在企业局域网上使用Docker 17.03.1-ce。
我检查并仔细检查了我的DNS设置。我使用了各种方法配置我在互联网搜索中找到的DNS。有些在启动时导致错误。我最终确定配置DNS的方法是上面链接的故障排除Linux部分中的方法,其中DNS是通过/ etc / docker目录中的daemon.json文件配置的。
但是,我仍然有同样的问题。最终解决了我的问题是通过http_proxy和https_proxy环境变量的配置代理。我在Dockerfile中指定了它们,但在RUN pip命令之前我忽略了这一点。
即使它似乎是一个DNS问题,在RUN命令之前移动这些ENV命令对我来说也是不同的。如果这对有这个问题的人有帮助。
答案 9 :(得分:2)
我不知道原因,但错误意味着pip正在尝试将/simple/blinker/
解析为DNS主机名而不是pypi.python.org
部分,这似乎很奇怪,因为我甚至无法提出使用urlparse
可以返回此类字符串作为主机名部分的任何URL。我会检查~/.pip/pip.conf
答案 10 :(得分:1)
将docker DNS配置为Google DNS(8.8.8.8)或10.0.0.2在我的公司环境中无效。
运行:$ drill @ 8.8.8.8 www.amazon.com或@ 10.0.0.2确认了这一点。
为了找到可以运行的DNS我运行: $ drill www.amazon.com它给了我在我的网络中使用的DNS IP。
然后我使用以下步骤在Ubuntu中设置它以配置docker的DNS。
在/etc/docker/daemon.json
中更改了dns{
"dns": ["the DNS ip from step1"]
}
Restart docker: sudo service docker restart
答案 11 :(得分:1)
对我来说,这是由于连接到我的大学VPN引起的。断开连接以“解决”问题。
答案 12 :(得分:1)
我是Docker的新手并尝试了这里提到的所有方法,但仍然没有做到正确。 Docker版本是18,ubuntu版本是16.我尝试了这种方法: - 首先我用公司的互联网建立docker。这个网络阻止了一些网站或者某些东西在这里没有进展顺利。所以其次我连接到我自己的网络(例如我在手机中使用)并尝试过。事情进展顺利。 requirements.txt已成功安装,并且已构建docker。
答案 13 :(得分:1)
我遇到了同样的问题。错误的原因是代理。
所以,我按照
编辑DockerfileRUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port
答案 14 :(得分:1)
让它运行。有时pypi会出现连接问题,这些问题会让你觉得它已经破了。只是为了确定,让它滚动,你可能会发现它可以自行解决。
尽管存在这些红色错误行,但最后一行是“成功构建”
$ docker build .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM docker-registry.aws.example.com:5000/cmcrc/python2:20160517120608
---> 1e5034711aa9
Step 2 : RUN pip install prometheus-client requests
---> Running in f3c580fc93ae
Collecting prometheus-client
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8610>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d87d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8990>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8b50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8d10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
Downloading prometheus_client-0.0.13.tar.gz
Collecting requests
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9d4d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9da10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dc50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9de10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dfd0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
Downloading requests-2.10.0-py2.py3-none-any.whl (506kB)
Building wheels for collected packages: prometheus-client
Running setup.py bdist_wheel for prometheus-client: started
Running setup.py bdist_wheel for prometheus-client: finished with status 'done'
Stored in directory: /root/.cache/pip/wheels/04/94/f5/b803b2ff65e8344e99ca99b7f7cb8194224017167809a32b78
Successfully built prometheus-client
Installing collected packages: prometheus-client, requests
Successfully installed prometheus-client-0.0.13 requests-2.10.0
---> 19c5e3cfe08f
Removing intermediate container f3c580fc93ae
Successfully built 19c5e3cfe08f
答案 15 :(得分:0)
以防有人使用docker-compose阅读此内容。我设法通过如下更改yaml文件来解决此问题
version: 3.4
service: my-app
build:
context: .
network: host
相当于写作
docker build . --network host
答案 16 :(得分:0)
我猜您试图在不允许从公共存储库直接访问/安装的私有环境中运行 pip install。如果是这种情况,您可以将 --index-url 和 --trusted-host 添加到 requirements.txt 中,如下所示:
requirements.txt:
--index-url https://pypi.internal.org/api/pypi/org.python.pypi/simple
--trusted-host pypi.internal.org pypi.python.org pypi.org files.pythonhosted.org
blinker==1.3
答案 17 :(得分:0)
对我来说,这是因为我在 VPN 上,而 docker 找不到我的私人 PYPI 的路由。如果您需要继续使用 VPN,请使用 \<FEMALE\>I'm beautiful = Je suis belle