Mig*_*ell 63 python pip docker fig
我正在按照无花果指南使用带有python应用程序的docker,但是当docker启动命令时
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
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/
Run Code Online (Sandbox Code Playgroud)
这重复几次,然后我收到另一条消息:
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))
Run Code Online (Sandbox Code Playgroud)
所以由于某种原因,pip无法访问docker容器内的任何包.有什么我需要做的,以允许它上网?
然而,pip可以很好地在docker容器之外安装东西,并且即使使用那个确切的package(blinker==1.3
)也能正常工作,这样就不是问题了.此问题也不是特定于该包.我pip install
对任何包的任何命令都有同样的问题.
有谁知道这里发生了什么?
Tan*_*aho 53
你的问题来自于Docker没有使用正确的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-server取消注释和编辑该行:
prepend domain-name-servers 8.8.8.8, 8.8.4.4;
重启dhclient : $ sudo dhclient
.
在桌面上运行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
Run Code Online (Sandbox Code Playgroud)
运行docker时,只需添加以下参数: --dns 8.8.8.8
小智 18
我有同样的问题,它困扰了我一段时间,我在网上尝试了很多解决方案但无济于事.但是我最终解决了它如下:
Ubuntu 16.04
docker Server 18.03.0-ce
Run Code Online (Sandbox Code Playgroud)
运行以下命令,发现DNS服务器的地址:
$: nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 192.168.210.2
Run Code Online (Sandbox Code Playgroud)创建一个docker配置文件/etc/docker/daemon.json.
(如果您还没有)并将以下内容添加到该文件中:
{
"dns": ["192.168.210.2", "8.8.8.8"]
}
Run Code Online (Sandbox Code Playgroud)
如果您的网络的DNS不可用,则阵列的第一项是您的网络的DNS服务器,第二项是谷歌的DNS服务器作为后备.
保存该文件,然后重新启动docker服务
$: sudo service docker restart
Run Code Online (Sandbox Code Playgroud)orl*_*uke 16
好的,重新启动我的docker-machine正在解决问题.谢谢 - ismailsunni
这是我的解决方案:
docker-machine restart <machine-name>
Run Code Online (Sandbox Code Playgroud)
Dan*_*ook 10
我需要在我的docker build命令中添加--network = host:
docker build --network=host -t image_name .
Run Code Online (Sandbox Code Playgroud)
小智 9
如果有人正在使用 docker-compose 阅读本文。我设法通过如下更改我的 yaml 文件来解决此问题
version: 3.4
service: my-app
build:
context: .
network: host
Run Code Online (Sandbox Code Playgroud)
这相当于写作
version: 3.4
service: my-app
build:
context: .
network: host
Run Code Online (Sandbox Code Playgroud)
小智 7
您需要在docker配置中添加新的DNS地址
sudo nano /lib/systemd/system/docker.service
Run Code Online (Sandbox Code Playgroud)
在ExecStar之后添加dns.
--dns 10.252.252.252 --dns 10.253.253.253
Run Code Online (Sandbox Code Playgroud)
看起来应该是这样的:
ExecStart=/usr/bin/dockerd -H fd:// --dns 10.252.252.252 --dns 10.253.253.253
Run Code Online (Sandbox Code Playgroud)
然后做:
systemctl daemon-reload
sudo service docker restart
Run Code Online (Sandbox Code Playgroud)
应该管用.
就我而言,在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
Run Code Online (Sandbox Code Playgroud)为Docker添加以下设置。
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Run Code Online (Sandbox Code Playgroud)保存并关闭文件。
重新启动Docker守护进程:
sudo service docker restart
Run Code Online (Sandbox Code Playgroud)对我来说,由于docker的DNS配置不正确,我无法安装pip。我已经尝试了上述步骤,但是,将docker DNS配置为Google DNS对我的笔记本电脑不起作用。仅当我将其DNS设置为笔记本电脑的分配IP时,才能正确配置Docker的DNS。
如果使用Ubuntu,则可以使用以下步骤配置Docker的DNS:
找出设备的分配IP。您可以通过以下任一方式找到它
ifconfig
nmcli dev show | grep 'DNS'
编辑dns /etc/docker/daemon.json
(如果以前不存在则创建此文件)
{
"dns": ["your_ip_in_step_1"]
}
Run Code Online (Sandbox Code Playgroud)重新启动docker: sudo service docker restart
我遇到了同样的问题。错误原因是代理。
所以,我编辑 Dockerfile 以下
RUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port
Run Code Online (Sandbox Code Playgroud)
我不知道原因,但该错误意味着 pip 正在尝试将其解析/simple/blinker/
为 DNS 主机名而不是部分pypi.python.org
,这看起来很奇怪,因为我什至无法想出任何可以urlparse
返回这样的字符串作为主机名的URL部分。我会检查是否有问题~/.pip/pip.conf
归档时间: |
|
查看次数: |
51911 次 |
最近记录: |