Docker 构建时网络超时拉不到镜像?一些排查和配置记录

最近在服务器上 docker build 的时候一直报 failed to fetch anonymous token,偶尔直接 network timeout,镜像死活拉不下来。查了一圈,记录一下排查过程和最终的配置,以后自己也能翻。

问题出在从 Docker Hub 拉镜像这一步,要么 DNS 解析不到 registry-1.docker.io,要么网络压根不通。先做几个基础检查。

复制代码
ping 8.8.8.8
ping google.com
nslookup registry-1.docker.io

ping 8.8.8.8 如果都不通,那先看看虚拟机的网络模式,NAT 模式下宿主机必须能正常上网,桥接的话检查 IP 配置。一般云服务器不太会有这个问题,本地虚拟机踩坑的多。

DNS 解析失败就更常见了。很多人直接去改 /etc/resolv.conf 加 nameserver 8.8.8.8,但是这个文件重启就会被覆盖,临时用可以,长期还得配到 Docker 的 daemon.json 里。在 /etc/docker/daemon.json 加上 dns 字段:

复制代码
{
  "dns": ["8.8.8.8", "114.114.114.114"]
}

然后重启 docker:sudo systemctl restart docker。这样容器内的 DNS 也会用这个。

网络能通但拉镜像还是慢或者 403,那大概率是没配镜像加速。国内访问 Docker Hub 很不稳定,需要在 daemon.json 里设置 registry-mirrors。我用的 daocloud 和网易的源,任选一个或都加上:

复制代码
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com"
  ]
}

如果之前已经有 dns 配置,就合并到一起。配完重启 docker,用 docker info | grep Mirrors 看下有没有生效。

有些环境需要走代理,比如公司内网。那就给 Docker 服务配代理,创建 /etc/systemd/system/docker.service.d/http-proxy.conf:

复制代码
[Service]
Environment="HTTP_PROXY=http://<代理IP>:<端口>"
Environment="HTTPS_PROXY=http://<代理IP>:<端口>"

替换成自己的代理地址,然后 sudo systemctl daemon-reload && sudo systemctl restart docker

防火墙也可能拦了。本机用 ufw 或 firewalld 的可以直接关掉测试:

复制代码
sudo ufw disable          # Ubuntu
sudo systemctl stop firewalld  # CentOS

如果是云服务器,别忘了安全组出方向要放行 443 端口,目标 0.0.0.0/0,不然访问 registry-1.docker.io 会被拦截。

来此加密实现了一套完整的证书生命周期管理方案:从申请、验证、签发、部署,到到期提醒、自动续期,全流程自动化。你只需关注业务本身,证书管理交给来此加密,彻底消除运维盲点。

一套组合拳下来,我一般会这样一口气配好 DNS 和镜像加速:

复制代码
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
sudo tee /etc/docker/daemon.json <<EOF
{
  "dns": ["8.8.8.8"],
  "registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF
sudo systemctl restart docker

然后 docker pull nginx 测试一下,能拉下来基本就没问题了,再重新 build 你的镜像。

最后整理几个常见现象的对应关系,排查时心里有数:

报域名解析失败 → 去检查 /etc/resolv.conf 或 Docker 的 dns 配置。

连接超时 → 可能是网络不通或防火墙,先 ping 再查安全组。

返回 403 Forbidden → 八成没配镜像加速,加上 registry-mirrors。

代理认证失败 → 看看 http-proxy.conf 里的地址和端口对不对。

这些步骤基本能解决大多数构建时拉镜像的网络问题。如果还不行,可能得考虑用离线镜像或者搭个本地 registry,那就是另外的事了。

相关推荐
牛奶咖啡132 小时前
KVM虚拟化与企业应用实践——通过网络介质配合ks自动应答文件实现自动安装KVM虚拟机
云原生·qemu·kvm·系统网络引导与ks自动应答环境·远程资源+ks文件安装虚拟机·通过网络介质引导自动安装虚拟机·qemu的总线类型详解
爱吃龙利鱼3 小时前
k8s1.36部署helm和storageclass
云原生·容器·kubernetes
又是进步的一天3 小时前
一台虚拟机学习CI流程
学习·ci/cd·云原生·容器·kubernetes·devops
java_cj3 小时前
从kubectl源码学Cobra:打造专业级Go命令行工具的完整实践
运维·开发语言·后端·云原生·golang·kubernetes·k8s
杰克逊的日记1 天前
如何在不影响业务的情况下对K8S集群升级
云原生·容器·kubernetes
qq7590353661 天前
2026 docker run启动的容器通过命令导出为docker-composer.yml文件
docker·eureka·composer
nvd111 天前
Terraform 避坑:模块下线时,如何不破坏已有的 Instance Template?
云原生·terraform
子牙老师1 天前
你管这破玩意叫ChatGPT?
云原生·chatgpt·容器
梦想的颜色1 天前
Docker 知识全貌:一份体系化的知识结构报告
docker·云原生·容器·eureka