我的组织使用 http/https 代理。到互联网的流量必须通过此代理路由。
我们正在为构建和推送 docker 镜像的 jenkins 管道添加多架构支持。 HTTP_PROXY 和 HTTPS_PROXY 环境变量是为 docker 设置的,适用于常规 docker 构建,但是当尝试使用
docker buildx build
命令构建多个架构时,我看到下面的错误
无法解决:rpc错误:代码=未知desc = amazoncorretto:11:无法执行请求:头“https://registry-1.docker.io/v2/library/amazoncorretto/manifests/11”:拨打tcp 44.207 .96.114:443:I/O 超时
它在本地工作。我确信这是因为流量不是通过代理路由的。我尝试通过 driver-opt 和 build-arg 设置它。
在 StackOverflow 上找不到任何答案后,我搜索了一些其他资源。您需要使用 driver opts 指定代理,但您需要指定网桥的 IP,例如
docker buildx create --use --driver-opt env.http_proxy=172.17.0.1:3128 --driver-opt env.https_proxy=172.17.0.1:3128 --driver-opt '"env.no_proxy='$no_proxy'"'
docker buildx build ...
您还需要配置代理(例如 CNTLM)以接受此 IP 上的连接。
我也在这个 docker buildx 上遇到了困难。我使用了 --driver-opt 和代理,但仍然没有解决。
将代理传递给 --build-arg 也没有帮助我。 (在一个虚拟机中它解决了问题,但在其他虚拟机中它没有帮助)
对我有帮助的是当我将“/run/buildkit/buildkitd.sock”传递给 no_proxy
类似这样的东西 导出 no_proxy="127.0.0.1,localhost,/run/buildkit/buildkitd.sock"
/run/buildkit/buildkitd.sock 对于 buildx 至关重要。