Docker 拉取镜像时报 context deadline exceeded 错误的解决方案

之前我们发文讨论过 根据 Docker 官方手册安装 Docker Engine 报 Connection reset by peer 错误的解决方法,但顺利安装 Docker 只是第一步,后续拉取、推送镜像都要用到 Docker Hub 的服务,以国内的网络环境,遇到阻力是不可避免的。

例如,Docker 拉取镜像时很可能会报 context deadline exceeded 错误,如果没有条件科学上网,那么用国内的镜像加速服务就是最便捷的解决方案。

方法一:配置阿里云镜像加速服务

阿里云有一个容器镜像服务 ACR,用户可以在后台获取专属的加速地址。假如是在阿里云服务器上使用 Docker,优先推荐这个加速服务。

首先,登录:阿里云容器镜像服务 ACR ,没有账号的话 点此注册

点击 管理控制台 登录后台:

阿里云容器镜像服务 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 错误的问题。

耕读君
耕读君

一个筋斗十万八千里,说明上云好啊

文章: 215

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注