Debian11上无法拉取docker镜像问题的解决方案
前言
前几天要在Debian11系统的边缘计算机上跑容器应用,但因为网络限制等原因拉取镜像总是失败,通过镜像加速器的方法终于可以正常拉取镜像了,花了些时间整理了一个可用的操作方案。
前提:确保Debian 11已安装Docker(若已安装过了,忽略此步)
如果还没装Docker,先执行以下命令快速安装(官方源,适配Debian 11):
# 更新源并安装依赖
sudo apt update && sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
核心解决方案(Debian 11专属亲测有效)
步骤1:一键创建/覆盖Docker配置文件(daemon.json)
直接执行以下命令,自动创建/替换/etc/docker/daemon.json,写入实测可解析、高可用的镜像加速器(JSON格式无错误,无需再手动编辑):
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com"
]
}
EOF
这4个地址均实测:域名可解析、Debian 11网络连通性好、无限流,优先走前2个,后2个作为备用。
步骤2:重新加载配置+重启Docker服务(Debian 11通用命令)
Debian 11使用systemd管理服务,执行以下命令使配置生效,这一步是关键:
# 重新加载systemd配置
sudo systemctl daemon-reload
# 重启Docker服务
sudo systemctl restart docker
# 验证Docker是否正常启动(可选,看输出active(running)即为正常)
sudo systemctl status docker --no-pager
输出中看到active (running)说明Docker重启成功,配置已加载。
步骤3:验证镜像加速器是否生效
执行以下命令,检查Docker是否识别了配置的镜像源:
docker info
在输出结果中找到Registry Mirrors字段,若显示如下内容,说明配置成功:
Registry Mirrors:
https://dockerproxy.com/
https://docker.1ms.run/
https://docker.m.daocloud.io/
https://hub-mirror.c.163.com/
实际测试:拉取镜像验证问题解决
执行最基础的hello-world镜像拉取,能成功则说明所有问题解决,后续拉取nginx、ubuntu等镜像均无超时:
docker pull hello-world
兜底排查(若仍超时,仅需2步,Debian 11专属)
到上一步应该可以下载镜像了,如果配置后还是超时,大概率是Debian 11的防火墙/代理拦截,客户就是这样的情况,按以下步骤排查(均为临时操作,解决后可恢复):
1. 临时关闭ufw防火墙(Debian 11默认防火墙)
# 临时关闭
sudo ufw disable
# 验证是否关闭(输出Status: inactive)
sudo ufw status
2. 关闭系统全局代理(若开启)
# 检查是否有全局代理(无输出则说明未开启,无需操作)
echo $http_proxy $https_proxy
# 若有输出,临时清空代理
unset http_proxy https_proxy
完成后重新执行 docker pull hello-world,大概率就没问题了。
恢复防火墙(可选,解决问题后建议开启)
# 重新开启ufw防火墙
sudo ufw enable
简要总结一下
1.全程无需手动编辑文件,所有命令一键复制执行,适配Debian 11的系统特性;
2.配置的4个镜像地址均实测可解析、连通性优,解决官方仓库访问问题;
3.Debian 11重启Docker的核心命令是systemctl daemon-reload && systemctl restart docker,必须执行;
4.验证标准:docker info能看到镜像源 + docker pull hello-world成功拉取。
更多推荐
所有评论(0)