鉴于国内网络环境,要想愉快的玩耍docker,不用代理几乎是不可能的,即使官方的docker hub有国内源可用,但第三方的hub比如quay.io在国内是无法直连的,网上的解决方案大多都是使用代理下载打包到本地再导入,非常麻烦。
docker使用代理很多地方都只有讲到docker pull时的代理
docker search\pull代理
假如你已经通过某种方式获得了一个可畅通无阻的http/https代理:192.168.1.10:8000
参照官方文档docker设置代理:
为docker服务创建一个systemd目录:
1
sudo mkdir -p /etc/systemd/system/docker.service.d
创建一个http-proxy.conf文件:
1
/etc/systemd/system/docker.service.d/http-proxy.conf
按以下格式添加 HTTP_PROXY 环境变量:
1 | [Service] |
如果要设置 HTTPS 代理, 创建一个https-proxy.conf文件:
1 | /etc/systemd/system/docker.service.d/https-proxy.conf |
按以下格式添加 HTTPS_PROXY环境变量:
1 | [Service] |
当然, 也可以设置NO_PROXY环境变量来指定域名或IP不使用代理。
http-proxy.conf配置样例:
1 | [Service] |
https-proxy.conf配置样例:
1 | [Service] |
关于NO_PROXY的更多详细配置可查看文档。
完成以上配置之后, 重新加载systemd的配置:
1
sudo systemctl daemon-reload
重启docker:
1
sudo systemctl restart docker
验证配置是否已经被加载:
验证http proxy:
1 | $ systemctl show --property=Environment docker |
验证https proxy:
1 | $ systemctl show --property=Environment docker |
经过以上设置, docker search和pull就会直接走设置的http/https代理了。
docker build代理
当在本地构建镜像时,除了先pull一个基础镜像,在构建过程中要下载某个资源,update构建容器内的软件仓库,下载软件包也是常用的操作,而docker hub上常见镜像比如alpine, debian, centos里的软件源并没有设置为国内源, 如果要在构建容器内下载安装软件,光是update操作就很费时,要么在Dockerfile里讲软件源替换为国内源,要么就用代理。每个发行版的国内源和更换方式都不一样,有时候要下载github上或者其他的国外资源,所以使用代理就很方便了。
在docker build阶段,是不会使用上面设置的docker代理的
同样,假如你已经通过某种方式获得了一个可畅通无阻的http/https代理:192.168.1.10:8000(注意:不要使用127.0.0.1这样的回环地址,需使用宿主机对外的网卡地址,保证容器内部能够访问到)
docker build可通过build-arg参数来设置代理
1 | docker build --build-arg http_proxy=http://192.168.1.10:8000 --build-arg https_proxy=http://192.168.1.10:8000 -t proxy_test . |
通过以上设置,docker pull和docker build都能使用到我们的自己的代理了,让docker不再被国内的网络环境所束缚。但是,首先,你还得有一个http/https代理。