阿里云 ECS 上 Docker Hub 拉取失败的处理记录
问题背景
在阿里云服务器上直接拉取 Docker Hub 镜像时,常见现象包括:
docker pull很慢- 拉取过程中超时
- 反复重试后仍然失败
- 某些镜像在本地网络正常,但在云服务器上无法稳定下载
这类问题很多时候不是 Docker 本身损坏,而是访问 Docker Hub 的链路较慢或不稳定。
阿里云官方给出的一个常见处理办法,是先为当前账号获取 ACR 镜像加速器地址,再把它配置到 Docker 或 Containerd 中。
官方文档:
先说结论
如果只是想先把机器拉起来、让 docker pull 别再卡死,最实用的做法是:
- 在阿里云容器镜像服务 ACR 控制台里获取你自己的镜像加速器地址
- 把这个地址写进 Docker 的
daemon.json - 重启 Docker
- 用
docker info和一次实际拉取确认是否生效
重要限制
阿里云官方文档里有一个必须注意的点:
- ACR 镜像加速目前已经停止同步最新镜像
- 如果你依赖
latest标签,拉到的镜像不一定是最新版本 - 如果某个镜像始终拉不到,或者你明确需要最新版本,这个方案未必可靠
官方给出的替代方向主要有两个:
- 在 ACR 中订阅海外源镜像
- 使用全球加速 GA 直接加速海外源访问
所以这篇记录更适合下面这种场景:
- 个人开发
- 临时排障
- 快速恢复 Docker Hub 拉取能力
如果是生产环境,最好不要把对 Docker Hub 的访问稳定性完全寄托在这个方案上。
步骤一:获取 ACR 镜像加速器地址
按官方文档的路径进入控制台:
- 登录阿里云容器镜像服务控制台
- 进入:
镜像工具 > 镜像加速器 - 复制当前账号对应的加速器地址
这个地址通常形如:
https://<your-id>.mirror.aliyuncs.com
步骤二:配置 Docker 镜像加速器
如果你使用的是较新的 Docker 版本,直接改 /etc/docker/daemon.json 就够了。
推荐配置
{
"registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]
}
实际操作
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
验证是否生效
docker info
docker pull ubuntu:22.04
检查 docker info 的输出里是否出现 Registry Mirrors,再看实际拉取是否恢复正常。
如果你用的是 Containerd
官方文档也给了 Containerd 的处理方式,核心思路是:
- 确认
/etc/containerd/config.toml里已经配置了config_path - 清理旧的
mirror配置,避免冲突 - 创建
docker.io/hosts.toml - 重启 Containerd
一个常见配置形态如下。
1. 确认 config_path
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
2. 创建 hosts.toml
文件路径:
/etc/containerd/certs.d/docker.io/hosts.toml
文件内容:
server = "https://registry-1.docker.io"
[host."https://<your-id>.mirror.aliyuncs.com"]
capabilities = ["pull", "resolve", "push"]
3. 重启并排错
sudo systemctl restart containerd
sudo journalctl -u containerd
如果启动失败,优先检查是不是旧的 mirror 配置还残留在 config.toml 里。
我更建议的使用方式
实际使用里,建议把这个方案理解成“先恢复可用”,而不是“永久解决 Docker Hub 问题”。
比较稳妥的做法是:
- 基础镜像尽量固定明确版本,不要依赖
latest - 对常用镜像提前缓存或同步到自己的仓库
- 生产环境尽量减少对 Docker Hub 直连的依赖
最小可用排障流程
如果以后再遇到“阿里云上 Docker Hub 拉不动”,可以直接按这个顺序排查:
- 先确认机器本身能正常联网
- 进入 ACR 控制台复制镜像加速器地址
- 配置
/etc/docker/daemon.json - 重启 Docker
- 执行
docker info - 实际拉一个小镜像验证,例如
ubuntu:22.04 - 如果还是不行,再考虑是否切换到 ACR 订阅海外源或 GA