M1 Mac使用docker buildx构建amd64镜像时出现代理超时问题
M1 Mac构建amd64镜像代理超时问题排查与解决
问题描述
在M1 Mac上构建linux/amd64镜像,重启后相关命令可正常运行约一天,之后开始出现代理超时错误。
相关配置与命令
- Dockerfile起始内容:
FROM python:3.10.10-slim as build
- 执行的构建命令:
docker buildx build --build-arg http_proxy=http://myproxy:8080 --build-arg https_proxy=http://myproxy:8080 --build-arg HTTP_PROXY=http://myproxy.edu:8080 --build-arg HTTPS_PROXY=http://myproxy:8080 --load --platform linux/amd64 .
- 构建前创建buildx builder的命令:
docker buildx create --use --name mybuilder --driver=docker-container --driver-opt env.http_proxy=http://myproxy:8080 --driver-opt env.https_proxy=http://myproxy:8080 --driver-opt '"env.no_proxy='$no_proxy'"'
报错信息
1 | >>> FROM python:3.10.10-slim as build 2 | -------------------- ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: python:3.10.10-slim: failed to do request: Head "https://registry-1.docker.io/v2/library/python/manifests/3.10.10-slim": proxyconnect tcp: dial tcp myproxy:8080: i/o timeout
排查与解决步骤
检查代理服务可用性
直接在终端测试代理连通性:curl -x http://myproxy:8080 https://registry-1.docker.io,如果出现超时,说明代理服务本身故障,联系运维排查或重启代理。重置buildx builder容器
buildx的docker-container驱动会创建后台运行的容器,长期运行后可能出现网络连接异常,重置步骤:- 删除现有builder:
docker buildx rm mybuilder - 重新创建builder(修正原命令中no_proxy的引号格式问题):
docker buildx create --use --name mybuilder \ --driver=docker-container \ --driver-opt env.http_proxy=http://myproxy:8080 \ --driver-opt env.https_proxy=http://myproxy:8080 \ --driver-opt "env.no_proxy=$no_proxy" - 清除buildx缓存:
docker buildx prune -f
- 删除现有builder:
统一代理参数
构建命令中HTTP_PROXY使用了myproxy.edu,其余代理参数用的是myproxy,可能导致代理配置冲突,统一为同一地址后重试:docker buildx build \ --build-arg http_proxy=http://myproxy:8080 \ --build-arg https_proxy=http://myproxy:8080 \ --build-arg HTTP_PROXY=http://myproxy:8080 \ --build-arg HTTPS_PROXY=http://myproxy:8080 \ --load --platform linux/amd64 .配置Docker全局代理
避免每次构建都手动传递代理参数,在Docker Desktop中设置全局代理:- 打开Docker Desktop偏好设置 -> Resources -> Proxies
- 手动填写HTTP、HTTPS代理地址,添加
no_proxy列表 - 应用设置后重启Docker
内容的提问来源于stack exchange,提问作者eaubin
相关产品推荐
相关产品推荐

