之前我们发文讨论过 根据 Docker 官方手册安装 Docker Engine 报 Connection reset by peer 错误的解决方法,但顺利安装 Docker 只是第一步,后续拉取、推送镜像都要用到 Docker Hub 的服务,以国内的网络环境,遇到阻力是不可避免的。
例如,Docker 拉取镜像时很可能会报 context deadline exceeded 错误,如果没有条件科学上网,那么用国内的镜像加速服务就是最便捷的解决方案。
方法一:配置阿里云镜像加速服务
阿里云有一个容器镜像服务 ACR,用户可以在后台获取专属的加速地址。假如是在阿里云服务器上使用 Docker,优先推荐这个加速服务。
首先,登录:阿里云容器镜像服务 ACR ,没有账号的话 点此注册。
点击 管理控制台 登录后台:

在左侧展开“镜像工具”菜单,里面有个“镜像加速器”,点击后,右侧就会显示用户专属的加速链接。
使用方法很简单,直接使用页面下方提供的代码即可:
# 创建存放配置文件的目录
sudo mkdir -p /etc/docker
# 写入镜像加速地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的专属镜像加速地址"]
}
EOF
# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
设置完成后,可以尝试用 docker pull
命令拉取镜像。注意,这个加速服务只针对拉取服务,docker search
命令大概率依旧连接失败。
2024 年后,阿里云对镜像加速服务增加了限制,非阿里云内网即使配置了加速服务也不一定有用。对此,我们可以考虑使用其他公共镜像加速服务。
方法二:配置公共镜像加速服务
许多公司甚至个人搭建了 Docker 公共镜像加速服务,虽然速度、稳定性都不如上面说的阿里云镜像加速服务,但至少解决了“没有”这个问题。
GitHub 上有一个仓库,经常更新可用的公共镜像加速服务,项目地址:dongyubin/DockerHub,如果访问 GitHub 也有困难的话,还可以访问作者的个人博客:国内可用Docker镜像源加速器/DockerHub镜像汇总 。
公共镜像服务,尤其是个人搭建和分享出来的服务,其稳定性和可用性是没有保障的。因此,我们可以一次添加多个镜像源,减少 Docker 拉取失败的机率。
# 如果之前没配置过镜像源,同样先创建目录
sudo mkdir -p /etc/docker
# 接着写入多个镜像源
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.1ms.run",
"https://dytt.online",
"https://docker-0.unsee.tech",
"https://lispy.org",
"https://docker.xiaogenban1993.com",
"https://666860.xyz",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://demo.52013120.xyz",
"https://proxy.vvvv.ee",
"https://registry.cyou"
]
}
EOF
# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
注意,大多数公共镜像加速服务加速的也只是镜像拉取,搜索依旧有很大可能会失败。
方法三:临时使用加速服务
假如只是当前需要用到镜像加速服务,不想修改配置文件,要如何操作呢?
依旧参考 dongyubin/DockerHub 这个项目提供的信息,在 Docker 命令中指定源,例如:
docker pull docker.1ms.run/library/mysql
命令中的 docker.1ms.run
是加速源,library
是一个特殊的命名空间,它代表的是官方镜像,如果是某个用户的镜像就把 library
替换为镜像的用户名。
好了,通过以上方法,基本可以解决国内拉取 Docker 镜像报 context deadline exceeded 错误的问题。