Docker Pull走系统代理 #
在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。
1、创建 dockerd 相关的 systemd 目录,这个目录下的配置将覆盖 dockerd 的默认配置
$ sudo mkdir -p /etc/systemd/system/docker.service.d
2、新建配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf,这个文件中将包含环境变量
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
3、如果你自己建了私有的镜像仓库,需要 dockerd 绕过代理服务器直连,那么配置 NO_PROXY 变量:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com"
4、多个 NO_PROXY 变量的值用逗号分隔,而且可以使用通配符(*),极端情况下,如果 NO_PROXY=*,那么所有请求都将不通过代理服务器。
5、重新加载配置文件,重启 dockerd
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
6、检查确认环境变量已经正确配置:
$ sudo systemctl show --property=Environment docker
7、从 docker info 的结果中查看配置项。
Docker Build走系统代理 #
在Build时,在dockerfile中定义了宿主机的系统代理环境,但是在Build进入到容器内部执行命令时,这些系统代理配置无法生效,因为容器和宿主机使用NAT或者桥接,其IP地址不相同,如果需要使用系统代理,可以使用临时调试):构建时直接使用宿主机的网络这种方式会让构建过程中的容器使用宿主网络(适合你确定构建阶段必须直接走宿主网络时):
docker build --network=host ...