这个是在公司内网环境搭建的测试虚拟机,通过桥接的方式将该虚拟机部署在局域网内。由于公司内网没有直接使用外网的权限,所以上网都需要通过配置代理来实现。这里我在服务器的/etc/profile文件中配置了网络代理可以正常的进行软件安装,但是在使用docker时却发现docker命令好像使用不了这个代理(拉取不了镜像)。




本地docker push 总是重试 docker push 失败_docker hub push


尝试在内网环境下访问了下Docker Hub可以载入,说明当前的代理时允许访问Docker库。那么docker无法拉取镜像只能说明虚拟机中的代理在docker中失效,所以这么需要给Docker也来配置HTTP代理以让 Docker 能正常下载镜像。配置的 HTTP代理主要用于 Docker 拉取 (pull) 和推送 (push) 镜像使用,不会影响 Docker 容器的联网状态。


本地docker push 总是重试 docker push 失败_本地docker push 总是重试_02


创建服务目录

docker pull命令是由守护进程dockerd来执行,代理需要配在dockerd的环境中。而这个环境受systemd所管控,所以需要在systemd中进行代理配置。执行命令:mkdir -p /etc/systemd/system/docker.service.d在systemd目录下docker.service.d服务目录,该目录用于存放用户的个性设置(默认不存在),创建后会自动读取相关的设置并自动更新覆盖原有的设置。


本地docker push 总是重试 docker push 失败_docker pull下载很慢_03


创建配置文件

在刚才创建的/etc/systemd/system/docker.service.d/目录下创建一个*.conf的的配置文件,这里我们是配置代理就直接定义一个proxy.conf配置文件来添加代理信息。将proxy.example.com:8080换成自己的代理地址,这个代理必须是HTTP代理协议。如果还有内部不需要使用代理来访问则可以添加NO_PROXY配置来跳过代理的地址,填入所用到的本地地址,多个地址用逗号隔开(支持通配符*)。


本地docker push 总是重试 docker push 失败_docker 代理_04


刷新配置

更新了配置之后我们需要重新读取配置使其生效,然后执行命令:systemctl restart docker来重启docker服务。刷新之后我们可以查通过命令:systemctl show --property=Environment docker看下配置信息,如果在窗口显示了我们刚刚配置的代理信息就说明配置成功了。


本地docker push 总是重试 docker push 失败_docker 代理_05


验证配置是否生效

最后我们来pull下镜像看看效果,这里我们从Docker Hub上拉取一个最简单的hello-world镜像。这里我们可以看到已经车成功拉取了hello-world镜像,如果不确定可以通过命令:docker images或者docker image ls来查看本机已有的镜像。


本地docker push 总是重试 docker push 失败_docker 代理_06


总结:

这个一般出现在局域网内,如果遇到无法pull镜像可以尝试下配置docker代理。以上内容是小编给大家分享的【Docker实战010:docker配置代理解决无法pull】。希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

为了方便学习,下面附上本文用到的源码:

# docker pull centosUsing default tag: latestError response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)# mkdir -p /etc/systemd/system/docker.service.d    --p 递归创建目录,如果上级目录不存在则会按目录层级自动创建目录[Service]Environment="HTTP_PROXY=http://proxy.example.com:8080/"Environment="HTTPS_PROXY=http://proxy.example.com:8080/"Environment="NO_PROXY=localhost,127.0.0.1,.example.com"# systemctl daemon-reload  // 重新载入配置信息# systemctl restart docker // 重启docker服务# systemctl show --property=Environment docker  // 查看配置Environment=HTTP_PROXY=http://10.148.89.237:8080/ HTTPS_PROXY=http://10.148.89.237:808lines 1-1/1 (END)...skipping...Environment=HTTP_PROXY=http://10.148.89.237:8080/ HTTPS_PROXY=http://10.148.89.237:8080/ NO_PROXY=localhost,127.0.0.1,registry.docker-cn.com,hub-mirror.c.163.com# docker pull hello-worldUsing default tag: latestlatest: Pulling from library/hello-world0e03bdcc26d7: Pull complete Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0Status: Downloaded newer image for hello-world:latestdocker.io/library/hello-world:latest# docker imagesREPOSITORY    TAG       IMAGE ID       CREATED        SIZEhello-world   latest    bf756fb1ae65   9 months ago   13.3kB