BuildKit代理设置
在 Colima镜像 构建时,我通过 Colima Socks 代理 解决镜像下载问题。不过,实际上构建运行的容器也需要配置代理,以便能够无障碍安装开发软件。
虽然可以为每个容器手工配置代理,但是如果能够在 docker build 时自动注入和设置好代理环境变量,那么会方便后续的维护工作。这个步骤可以通过 BuildKit 实现。
单次构建动态注入
在执行 nerdctl build 命令:
构建镜像命令
docker build --no-cache \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \
--rm -t debian-ssh-tini .
修订为
增加注入环境变量
docker build --no-cache \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \
--build-arg HTTP_PROXY=socks5h://192.168.5.2:1080 \
--build-arg HTTPS_PROXY=socks5h://192.168.5.2:1080 \
--build-arg ALL_PROXY=socks5h://192.168.5.2:1080 \
--rm -t debian-ssh-tini .
配置全局网络代理
每次 nerdctl build 都传递代理参数比较麻烦,所以可以配置BuildKit默认的"全局构建网络代理"
编辑
/etc/buildkit/buildkitd.tomlcolima ssh
sudo vi /etc/buildkit/buildkitd.toml
在配置文件中加入 [worker.oci] 或 [worker.containerd] (取决于 Colima 当前使用的 worker 类型,通常在 Colima 中两者都写上最稳妥) 的环境变量配置:
在 buildkitd.toml 添加代理设置
[worker.oci]
enabled = false
env = [
"HTTP_PROXY=socks5h://192.168.5.2:1080",
"HTTPS_PROXY=socks5h://192.168.5.2:1080",
"ALL_PROXY=socks5h://192.168.5.2:1080",
"NO_PROXY=localhost,127.0.0.1,192.168.5.2"
]
[worker.containerd]
enabled = true
env = [
"HTTP_PROXY=socks5h://192.168.5.2:1080",
"HTTPS_PROXY=socks5h://192.168.5.2:1080",
"ALL_PROXY=socks5h://192.168.5.2:1080",
"NO_PROXY=localhost,127.0.0.1,192.168.5.2"
]
[grpc]
gid = 1000
然后重启BuildKit守护进程
重启BuildKit
sudo systemctl restart buildkit
备注
在 Go 语言编写的底层组件(BuildKit / nerdctl)中,环境变量对大小写极其敏感。
很多 Linux 工具(如 curl、wget)能同时识别小写
all_proxy和大写ALL_PROXYBuildKit 的内置构建参数只严格识别 大写
HTTP_PROXY/HTTPS_PROXY/ALL_PROXY
如果传入了小写的 --build-arg all_proxy=... ,BuildKit 会直接将其视作普通的自定义参数,从而失去 "构建期自动注入、构建完自动擦除" 的特权,导致容器内部依然没有网络。因此,请务必全部使用大写。