> 技术文档 > 如何解决Docker和Containerd拉取不了镜像的问题?_docker无法拉取镜像

如何解决Docker和Containerd拉取不了镜像的问题?_docker无法拉取镜像

由于hub docker禁止国内下载,对此,使用以下镜像加速器来解决此问题

什么是镜像加速器?

镜像加速器是一种代理服务,用于缓存公共镜像仓库(如 Docker Hub、Google Container Registry 等)中的镜像。其核心作用是:

  • ​加速镜像拉取​​:通过就近部署的服务器缓存镜像,减少跨国网络延迟。
  • ​降低上游压力​​:减少直接访问原始仓库的请求量,提升整体稳定性。
  • ​支持企业定制​​:可自建加速器,结合内网优化或安全策略

建议配置多个加速器

  • 避免单点故障:如果某个加速器失效,Docker 会自动尝试下一个2。

  • 提高成功率:不同加速器可能同步不同的镜像,多个地址可提高拉取成功率

### 解决Docker拉取不了镜像的问题 ###

docker.m.daocloud.io 是(DaoCloud国内知名容器服务提供商)提供的稳定加速器,推荐使用

sudo tee /etc/docker/daemon.json <<EOF{ \"registry-mirrors\": [ \"https://docker.m.daocloud.io\", \"https://docker.actima.top\", \"https://docker.1panel.live\" ]}EOFsystemctl restart dockerdocker pull nginx

镜像加速器的工作原理​

当你在 Docker 中配置了镜像加速器,Docker 的拉取流程如下:

  1. ​​优先尝试第一个加速器​​拉取。
  2. 若第一个加速器​无法访问​(如网络错误、超时),则尝试第二个加速器。
  3. 若第二个加速器也​无法访问​​,则尝试第三个加速器。
  4. 如果所有加速器均​无法访问​​,最终回退到 Docker Hub进行拉取。

镜像加速器缓存机制​​:

  1. 如果加速器中​​有缓存​​该镜像,直接返回。
  2. 如果加速器中​​没有缓存​​,加速器会从上游源(如 Docker Hub)拉取镜像,并​​缓存一份在加速器​​中,后续请求可以直接使用缓存。
  3. ​回退机制​​:如果镜像加速器无法访问或拉取失败,Docker 会回退到 Docker Hub进行拉取

### 解决Containerd拉取不了镜像的问题 ###

以下的所有修改均在/etc/containerd/config.toml目录文件下配置执行

### 配置docker.io仓库地址使用镜像加速 ###

vim /etc/containerd/config.toml... # 配置代理镜像站加速 [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors] [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"docker.io\"] endpoint = [\"https://docker.m.daocloud.io\"]...systemctl restart containerd

镜像加速器的响应​​:以拉取 docker.io/nginx:latest 为例:

  1. ​匹配镜像主机名​​:
    Containerd 发现配置了 docker.io 的 mirrors,使用对应的 endpoint
  2. ​向镜像加速器发起请求​​:
    直接请求 https://docker.m.daocloud.io/v2/nginx/manifests/latest
  3. ​镜像加速器的响应​​:
    • ​成功​​:返回镜像数据。
    • ​失败​​(如 404 或网络错误):Containerd ​​不会尝试 Docker Hub​​,拉取直接失败。

镜像加速器的缓存逻辑​​

当 docker.m.daocloud.io本地无缓存时,它会自动从 Docker Hub 拉取并缓存,再返回镜像数据

### 配置ghch.io仓库地址使用镜像加速 ###

 # 配置镜像加速 [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors] # ghcr镜像加速 [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"ghcr.io\"] endpoint = [\"https://docker.m.daocloud.io\"] 

### 配置多个加速地址方式 ###

中括号里面以逗号分隔多个加速地址,如下docker hub镜像加速

 # 配置镜像加速 [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors] # ghcr镜像加速 [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"ghcr.io\"] endpoint = [\"https://docker.m.daocloud.io\"] # docker hub镜像加速 [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"docker.io\"] endpoint = [\"https://docker.m.daocloud.io\", \"https://docker.mirrors.ustc.edu.cn\", \"https://registry.docker-cn.com\"]

### 配置Containerd使用私有镜像仓库 ###

不存在要使用的私有Image Registry时,本步骤可省略。

当要请求registry.tt.com镜像地址的时候,会去我们的私有镜像仓库拉取地址,https://registry.tt.com

[plugins.\"io.containerd.grpc.v1.cri\".registry][plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors] [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"registry.tt.com\"] endpoint = [\"https://registry.tt.com\"]

### 配置私有镜像仓库跳过tls验证 ###

若私有Image Registry能正常进行tls认证,则本步骤可省略

[plugins.\"io.containerd.grpc.v1.cri\".registry.configs] [plugins.\"io.containerd.grpc.v1.cri\".registry.configs.\"registry.tt.com\".tls] insecure_skip_verify = true

### 配置拉取K8S镜像使用阿里云镜像地址拉取 ###

[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors] # 当请求registry.k8s.io,会去https://registry.aliyuncs.com/google_containers拉取镜像 [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"registry.k8s.io\"] endpoint = [\"https://registry.aliyuncs.com/google_containers\"]

​在以上的配置示例中,通过 endpoint 指定了阿里云镜像仓库地址(含命名空间),这与镜像加速器(Registry Mirror)的工作机制存在本质区别。以下是具体分析:

​行为解释:​

  1. ​镜像地址重定向​

    • 当尝试拉取 registry.k8s.io/pause:3.6 时,Containerd 会将其重定向到 https://registry.aliyuncs.com/google_containers/pause:3.6
    • ​本质是硬编码路径映射,而非代理镜像加速。​
  2. ​缓存功能缺失​

    • 阿里云镜像仓库 registry.aliyuncs.com/google_containers 没有自动缓存能力,镜像必须已存在于该仓库中才能拉取成功。
    • 若该仓库中不存在 pause:3.6,则拉取直接失败,​​不会回退到原始仓库 registry.k8s.io 或 Docker Hub​。
    • google_containers 系早期社区爱好者自行创建的个人仓库,因其仓库公开 且 传播较广,可能导致了相当一部分误判为阿里云提供的公开社区镜像同步仓库。若该仓库未维护相关镜像​​:直接拉取失败,且无自动缓存或回退机制。​

 镜像加速器与镜像仓库的区别​

​特性​​ ​​镜像加速器 (Registry Mirror)​​ ​​镜像仓库 (Registry + Namespace)​​ ​​地址格式​​ 通常为 https://.mirror.aliyuncs.com https://registry.aliyuncs.com/​功能定位​​ 作为上游仓库(如 Docker Hub)的透明代理 + 缓存 存储用户主动推送的镜像,无自动代理功能 ​​缓存机制​​ 支持:未命中时自动从上游拉取并缓存 不支持:仅存储用户显式推送的镜像 ​​拉取逻辑​​ 客户端无感知,镜像地址保持原生(如 nginx:latest) 必须明确指定仓库地址(如 registry.aliyuncs.com/ns/nginx

郑州论坛