前言

前几天要在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成功拉取。

更多推荐