网络连接不稳定是最常见的罪魁祸首
你在公司或家里用 Wi-Fi 更新镜像时,偶尔会卡住或者直接报错。这种情况八成是网络波动导致的。比如你正在拉取一个 Docker 镜像,中途路由器抽风断了两秒,下载的分片就对不上了,系统自然会提示更新失败。建议切换到更稳定的网络环境,或者使用有线连接代替无线。
镜像源地址失效或被墙
很多人习惯用国内的第三方镜像站加速拉取,比如以前常用的 Daocloud 或阿里云镜像。但这些源一旦停止维护,或者被临时屏蔽,就会出现 404 或超时错误。你可以试着在浏览器里打开配置的镜像地址,看能不能访问到根目录信息。如果打不开,就得换源了。比如改成官方源或其他可用的公共镜像站。
磁盘空间不足也会导致更新中断
特别是服务器运行久了,/var/lib/docker 目录占满的情况很常见。当你执行镜像更新时,系统需要先下载新层再合并,这个过程会占用额外空间。如果剩余空间不够,就会直接失败。可以用 df -h 查看一下磁盘使用情况,清理无用镜像或容器后再试。
权限问题别忽视
有时候你用普通用户执行更新命令,但 Docker 守护进程没有给该用户授权,就会报 permission denied。解决办法是把你加入 docker 用户组:
sudo usermod -aG docker $USER改完后重新登录生效。另外,如果是 rootless 模式运行,也需要注意家目录下的运行时路径是否有写权限。
配置文件写错了地址
Docker 的 daemon.json 文件里如果填了不存在的镜像地址,比如拼错了域名 registry.mirrors.aliyuncs.co(少了个 m),那就永远连不上。检查配置文件是最容易被忽略的一步。可以用以下命令查看当前配置:
cat /etc/docker/daemon.json确认里面的 mirror 列表是否正确无误。
目标镜像本身有问题
有些时候不是你的问题,而是上游镜像构建时就出错了。比如标签 latest 实际指向了一个未完整推送的版本,或者某一层损坏了。这时候可以尝试指定一个具体的稳定版本号拉取,而不是用默认 latest。例如:
docker pull ubuntu:20.04往往比 docker pull ubuntu 更可靠。
小技巧:开启调试模式看详细日志
当遇到莫名其妙的失败,可以启动 Docker 的 debug 模式,查看更详细的输出信息。编辑 daemon.json 加上:
{
"debug": true
}然后重启服务,再执行拉取操作,通过 journalctl -u docker.service 查看日志,通常能定位到具体哪一步出了问题。