代理网络环境下配置Docker联网拉取镜像
出现的问题(类似关键字):
Get https://registry-1.docker.io/:net/http:request canceled while waiting for connection (Client.Timeout exceeded while awiting headers)
应用场景:
通过代理联网的应用环境,Linux系统中虽然已配置代理可以联网(比如yum,curl都可联网了),但Docker也需要单独配置代理联网拉取镜像
事实与真相:
Docker这个程序只是一个控制台程序,用于attach,真正操作docker的是运行在后台的docker daemon,也就是我们需要通过systemctl start docker
来启动docker daemon。所以说即使我们设置了环境变量http_proxy,那么也只是针对前台docker console使用,而真正访问pull镜像的确是后台的daemon,因此,需要设置daemon访问proxy。
解决问题:
1.创建docker配置文件
mkdir /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/http-proxy.conf
2.写入下面的内容:
[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]" "NO_PROXY=localhost,127.0.0.1"
Environment="HTTPS_PROXY=http://[proxy-addr]:[proxy-port]" "NO_PROXY=localhost,127.0.0.1"
3.更新配置
systemctl daemon-reload
4.重启Docker服务
systemctl restart docker
5.确认配置已生效
systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://[proxy-addr]:[proxy-port] NO_PROXY=localhost,127.0.0.1
6.拉取镜像测试(hello-world)
docker pull hello-world