Linux下Docker build无法使用代理的问题求助(Docker 23.0.1)
Docker Build时代理失效导致I/O超时的解决办法
问题根源
docker run和docker compose拉取镜像用的是容器层面的代理配置,但docker build是由Docker守护进程执行的构建操作,守护进程的代理配置和容器运行时相互独立——这就是前者正常、后者出现超时的核心原因。
具体解决方案
1. 配置Docker守护进程全局代理
编辑(或新建)Docker守护进程的配置文件 /etc/docker/daemon.json,写入以下内容:
{ "proxies": { "default": { "httpProxy": "http://你的代理IP:端口", "httpsProxy": "http://你的代理IP:端口", "noProxy": "localhost,127.0.0.1,localaddress,.localdomain.com" } } }
把你的代理IP:端口替换成实际的代理地址,noProxy里可添加不需要走代理的本地或内网地址。
配置完成后重启Docker服务:
sudo systemctl daemon-reload sudo systemctl restart docker
2. 临时在Build过程中指定代理
如果不想修改全局配置,可在执行docker build时通过--build-arg传递代理参数:
docker build --build-arg HTTP_PROXY=http://你的代理IP:端口 --build-arg HTTPS_PROXY=http://你的代理IP:端口 .
用Docker Compose的话,在docker-compose.yml的build节点下添加参数:
services: 你的服务名: build: context: . args: - HTTP_PROXY=http://你的代理IP:端口 - HTTPS_PROXY=http://你的代理IP:端口
3. 验证代理的网络连通性
先确认Docker主机能正常访问代理服务器,执行以下命令测试:
curl -x http://你的代理IP:端口 https://registry-1.docker.io/v2/
如果返回{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]},说明代理连通正常(匿名拉取镜像时这个返回是正常的);如果还是超时,得先排查代理服务器的网络可达性,比如防火墙、代理权限等问题。
4. 处理Docker BuildKit的特殊情况
如果你的Docker启用了BuildKit,可能需要额外配置代理。可以在/etc/docker/daemon.json里补充BuildKit的配置:
{ "proxies": { "default": { "httpProxy": "http://你的代理IP:端口", "httpsProxy": "http://你的代理IP:端口", "noProxy": "localhost,127.0.0.1,localaddress,.localdomain.com" } }, "features": { "buildkit": true } }
或者临时通过环境变量指定:
DOCKER_BUILDKIT=1 HTTP_PROXY=http://你的代理IP:端口 HTTPS_PROXY=http://你的代理IP:端口 docker build .
内容的提问来源于stack exchange,提问作者lctl83
相关产品推荐
相关产品推荐

