我在我的Ubuntu 13.10(Saucy Salamander)上安装了Docker,当我输入我的控制台时:
sudo docker pull busybox
我收到以下错误:
Pulling repository busybox 2014/04/16 09:37:07 Get https://index.docker.io/v1/repositories/busybox/images: dial tcp: lookup index.docker.io on 127.0.1.1:53: no answer from server
Docker版本:
$ sudo docker version Client version: 0.10.0 Client API version: 1.10 Go version (client): go1.2.1 Git commit (client): dc9c28f Server version: 0.10.0 Server API version: 1.10 Git commit (server): dc9c28f Go version (server): go1.2.1 Last stable version: 0.10.0
我在没有身份验证的代理服务器后面,这是我的/etc/apt/apt.conf
文件:
Acquire::http::proxy "http://192.168.1.1:3128/"; Acquire::https::proxy "https://192.168.1.1:3128/"; Acquire::ftp::proxy "ftp://192.168.1.1:3128/"; Acquire::socks::proxy "socks://192.168.1.1:3128/";
我究竟做错了什么?
以下是代理HTTP的官方Docker文档的链接:https: //docs.docker.com/config/daemon/systemd/#httphttps-proxy
快速概述:
首先,为Docker服务创建一个systemd插件目录:
mkdir /etc/systemd/system/docker.service.d
现在创建一个名为的文件/etc/systemd/system/docker.service.d/http-proxy.conf
,添加HTTP_PROXY
环境变量:
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/"
如果您有内部Docker注册表,您需要联系而无需代理,您可以通过NO_PROXY
环境变量指定它们:
Environment="HTTP_PROXY=http://proxy.example.com:80/" Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"
同花顺变化:
$ sudo systemctl daemon-reload
验证是否已加载配置:
$ sudo systemctl show --property Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80/
重启Docker:
$ sudo systemctl restart docker
您的APT代理设置与Docker无关.
Docker使用HTTP_PROXY环境变量(如果存在),例如:
sudo HTTP_PROXY=http://192.168.1.1:3128/ docker pull busybox
但相反,我建议您查看一下您的/etc/default/docker
配置文件:您应该有一行来取消注释(并可能调整)以自动应用您的代理设置.然后重启Docker服务器:
service docker restart
在CentOS上,Docker的配置文件位于:
/etc/sysconfig/docker
添加以下行帮助我让Docker守护程序在代理服务器后面工作:
HTTP_PROXY="http://: " HTTPS_PROXY="http:// : "
如果您正在使用新的Docker for Mac(或Docker for Windows),只需右键单击Docker托盘图标并选择首选项(Windows:设置),然后转到高级,然后在代理下指定您的代理设置.单击Apply并重新启动并等待Docker重新启动.
在Ubuntu上,您需要为Docker守护进程设置http_proxy,而不是客户端进程.这是在/etc/default/docker
(见这里)完成的.
为了扩展Arun上面的答案,为了在CentOS 7中工作,我不得不删除"export"命令.所以编辑
/etc/sysconfig/docker
并添加:
HTTP_PROXY="http://: " HTTPS_PROXY="https:// : " http_proxy="${HTTP_PROXY}" https_proxy="${HTTPS_PROXY}"
然后重启Docker:
sudo service docker restart
该源是这个博客帖子.
如果您正在运行本地绑定的代理,例如监听127.0.0.1:8989
,它将无法在Docker for Mac中运行.从Docker文档:
我想从容器连接到主机上的服务
Mac具有更改的IP地址(如果您没有网络访问权限,则为无).我们目前的建议是将未使用的IP
lo0
连接到Mac上的界面; 例如:sudo ifconfig lo0 alias 10.200.10.1/24
,并确保您的服务正在侦听此地址或0.0.0.0
(即不是127.0.0.1
).然后容器可以连接到此地址.
类似的是Docker服务器端.(要了解Docker的服务器端和客户端,请尝试运行docker version
.)服务器端运行在具有自己的虚拟化层上localhost
.因此,它不会连接到localhost
主机OS 上的代理服务器.
所以,如果你使用像我这样的本地绑定代理,基本上你必须做以下事情才能使它适用于Docker for Mac:
让您的代理服务器监听0.0.0.0
而不是127.0.0.1
.警告:您需要正确的防火墙配置以防止恶意访问它.
向lo0
接口添加环回别名,例如10.200.10.1/24
:
sudo ifconfig lo0 alias 10.200.10.1/24
10.200.10.1:8989
从Docker托盘菜单中的"首选项"设置HTTP和/或HTTPS代理(假设代理服务器正在侦听端口8989
).
之后,通过从未下载的映像在新容器中运行命令来测试代理设置:
$ docker rmi -f hello-world ... $ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Status: Downloaded newer image for hello-world:latest ...
注意:设置的环回别名ifconfig
在重启后不会保留.使其持久是另一个主题.请用日语查看此博客文章(谷歌翻译可能会有所帮助).
这是对我有用的修复:Ubuntu,Docker版本:1.6.2
在文件中/etc/default/docker
,添加以下行:
export http_proxy='http://: '
重启Docker
sudo service docker restart
要将Docker配置为使用代理,您需要将HTTPS_PROXY/HTTP_PROXY环境变量添加到Docker sysconfig文件(/etc/sysconfig/docker
)中.
根据您是否使用init.d
或服务工具,您需要添加"export"语句(由于Debian Bug报告日志 - #767441./ etc/default/docker中的示例对于支持的语法有误导性):
HTTPS_PROXY="https://: @ : " HTTP_PROXY="https:// : @ : " export HTTP_PROXY="https:// : @ : " export HTTPS_PROXY="https:// : @ : "
Docker存储库(Docker Hub)仅支持HTTPS.要使Docker使用SSL拦截代理,您必须将代理根证书添加到系统信任库.
对于CentOS,将文件复制到/etc/pki/ca-trust/source/anchors/
并更新CA信任库并重新启动Docker服务.
如果您的代理使用NTLMv2身份验证 - 您需要使用Cntlm之类的中间代理来桥接身份验证.这篇博文详细解释了它.
安装Docker之后,请执行以下操作:
[mdesales@pppdc9prd1vq ~]$ sudo HTTP_PROXY=http://proxy02.ie.xyz.net:80 ./docker -d & [2] 20880
然后,您可以拉动或做任何事情:
mdesales@pppdc9prd1vq ~]$ sudo docker pull base 2014/04/11 00:46:02 POST /v1.10/images/create?fromImage=base&tag= [/var/lib/docker|aa088847] +job pull(base, ) Pulling repository base b750fe79269d: Download complete 27cf78414709: Download complete [/var/lib/docker|aa088847] -job pull(base, ) = OK (0)