docker build配置代理

在通过Dockerfile进行构建镜像时,经常会遇到容器内依赖无法下载的情况,这种原始是由于部分依赖在国内无法访问,必须通过代理进行转发。

配置

创建~/.docker/config.json文件,并配置如下信息:

1
2
3
4
5
6
7
8
9
10
11
{
"proxies":
{
"default":
{
"httpProxy": "http://192.168.2.133:7890",
"httpsProxy": "http://192.168.2.133:7890",
"allProxy": "socks5://192.168.2.133:7891"
}
}
}
  1. httpProxy:设置http网络访问的代理
  2. httpsProxy:配置https网络访问的代理
  3. allProxy:配置其他网络访问的代理

原理

docker会在启动容器时,将以上配置的json,转换为环境变量的形式,上面的配置类似于在Dockerfile中编写如下指令:

1
2
3
ENV HTTP_PROXY "http://192.168.2.133:7890"
ENV HTTPS_PROXY "http://192.168.2.133:7890"
ENV ALL_PROXY "socks5://192.168.2.133:7891"

从上面配置可以看出,就相当于我们启动容器后,通过控制台链接到容器,然后修改Linux内核的代理一样。

我们也可以在启动容器时通过添加参数的方式进行启动容器:

1
2
3
--env HTTP_PROXY="http://192.168.2.133:7890"
--env HTTPS_PROXY="http://192.168.2.133:7890"
--env ALL_PROXY="socks5://192.168.2.133:7891"

其他参数

  1. ftp_proxy:配置ftp访问的网络
  2. no_proxy:不使用代理的网络链接,如 *.test.example.com,.example2.com