Docker Build 配置代理
好像拖更有点久,我记得上一次写文章还是在上一次……
最近好多服务都开始用自己手搓的容器了,由于众所周知的原因,拉取很多项目的代码的体验会很差,在build阶段挂上代理就显得很重要了。
设备及软件说明
本次演示使用的计算机操作系统为 Ubuntu 22.04LTS
,其他操作系统的方法基本一致。
软件方面有如下配置:
- Docker version 24.0.7
- Docker Compose version v2.22.0
- 本机HTTP代理软件,默认监听本机的所以网卡的8080端口
- ufw
- ufw-docker (一个用于解决docker导致ufw防火墙失效的小工具)
实验过程
本次实验以 Caddy2 的容器为例
确认docker默认网卡的配置
通常情况下Linux的Docker默认网卡名为 docker0
,默认IP及其网段信息一般情况下是 172.17.0.1/16
,在运行build命令时临时容器将会在这张网卡的网段下,所以需要明确这张网卡的配置信息,以方便后续配置本地HTTP代理的地址,以及如果你跟我一样开启了防火墙的情况下开放端口使用。
首先可以运行以下命令查看网卡信息
你会得到类似如下的输出
如果你不打算修改默认配置的话就可以看下一节了,但如果你觉得默认网段有问题(不少企业网络会使用172的网段作为内网的地址段,会有比较大的概率冲突),那么就可以修改默认的网段。
修改默认网段
修改默认网段的方法非常简单,只需向 /etc/docker/daemon.json
中添加如下配置
并重启docker即可
同样的,重启后通过以下命令验证网段是否修改成功
开放防火墙端口
由于目前IPv6的逐渐普及,计算机不开放防火墙会有极大的安全风险,所以在我的本地环境中是启用防火墙的
在上一节中我们提到了默认网卡的网段问题,此时我们可以知道默认网卡的网段为 10.233.0.0/24
本机作为网关在这个网段中的地址为 10.233.0.1
我们希望这个网段中的容器可以访问本机的HTTP代理服务,即我们需要添加一条ufw规则以允许来自 10.233.0.0/24
的请求访问 10.233.0.1:8080
,具体的ufw命令如下
编辑Dockerfile
做好上述准备我们就可以开始配置容器的HTTP代理了
本次实际案例为编译一个包含自定义插件的Caddy2容器,依照官方文档原始的Dockerfile长这样:
可以看到在 RUN
当中我们需要从Github拉取我们需要的代码,但实际上由于网络环境问题很难正常拉取到,此时我们可以在这里加入HTTP代理的变量使其拉取时走本机的代理
经过上述处理即可愉快的手搓容器了。