Docker BuildKit构建镜像时DNS解析失败求助
问题:Docker BuildKit构建时DNS解析失败
执行的构建命令
DOCKER_BUILDKIT=1 docker build -f "tools/docker/Dockerfile" -t hello:latest --target hello "."
错误信息
执行FROM ubuntu:impish AS baseimg步骤时触发错误:
ERROR: failed to solve: failed to fetch oauth token: Post "https://auth.docker.io/token": proxyconnect tcp: dial tcp: lookup http on 127.0.0.1:53: no such host
已尝试的无效操作
- 修改
/etc/resolv.conf中的nameserver并重启Docker,错误中的DNS地址会变为设置的IP,但问题依旧 - 任意DNS服务器执行
nslookup auth.docker.io均可正常解析,docker pull操作也正常,仅构建时出错 - 执行
docker logout; docker login操作 - 开启/关闭代理
环境信息
- 系统:Ubuntu 22.04
- Docker版本:Docker version 23.0.5, build bc4487a
docker info输出:
Client: Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.10.4 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.17.3 Path: /usr/libexec/docker/cli-plugins/docker-compose Server: Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 3 Server Version: 23.0.5 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Using metacopy: false Native Overlay Diff: true userxattr: false Logging Driver: json-file Cgroup Driver: systemd Cgroup Version: 2 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 runc Default Runtime: runc Init Binary: docker-init containerd version: 2806fc1057397dbaeefbea0e4e17bddfbd388f38 runc version: v1.1.5-0-gf19387a init version: de40ad0 Security Options: apparmor seccomp Profile: builtin cgroupns Kernel Version: 5.19.0-41-generic Operating System: Ubuntu 22.04.2 LTS OSType: linux Architecture: x86_64 CPUs: 12 Total Memory: 31.15GiB Name: Ubuntu-Inspiron-5680 ID: 56fe649e-4761-4b6d-a258-828187c1f242 Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
解决方案建议
- 指定BuildKit的主机映射:先用
nslookup auth.docker.io获取其IP,在构建命令中添加--add-host参数绕过DNS解析:DOCKER_BUILDKIT=1 docker build --add-host auth.docker.io:18.169.185.159 -f "tools/docker/Dockerfile" -t hello:latest --target hello "." - 临时禁用BuildKit:去掉命令中的
DOCKER_BUILDKIT=1,使用传统构建方式尝试:docker build -f "tools/docker/Dockerfile" -t hello:latest --target hello "." - 配置Docker daemon全局DNS:创建或编辑
/etc/docker/daemon.json,添加公共DNS服务器:
保存后重启Docker服务:{ "dns": ["8.8.8.8", "8.8.4.4"] }sudo systemctl restart docker - 重置Buildx构建器:检查当前Buildx配置,创建新的构建器并切换使用:
docker buildx inspect docker buildx create --use - 清理BuildKit缓存:删除BuildKit的缓存和临时文件,避免缓存干扰:
docker builder prune -a
内容的提问来源于stack exchange,提问作者ihnfsa
相关产品推荐
相关产品推荐

