4 min read

解决Docker镜像拉取超时问题:使用DaoCloud公共镜像加速服务

解决Docker镜像拉取超时问题:使用DaoCloud公共镜像加速服务

问题描述

在使用Docker拉取镜像时,您是否遇到过以下错误信息:

Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

这个错误通常是由于网络连接问题或Docker Hub访问缓慢导致的,特别是在国内环境中。本文将介绍一个有效的解决方案——使用DaoCloud提供的公共镜像加速服务。

项目背景与目标

许多Docker镜像都存储在国外的镜像仓库中(如Docker Hub、gcr.io等),国内用户在拉取这些镜像时常常面临速度慢、连接超时等问题。DaoCloud的public-image-mirror项目旨在解决这一痛点。

项目目标

  • 简洁有效:通过简单的名称映射实现镜像加速
  • 易于扩展:添加新的镜像包无需修改代码
  • 稳定可靠:实时更新,每天检查同步情况
  • 数据一致性:所有hash(sha256)均与源仓库保持一致(采用懒加载机制)
注意:由于缓存机制,可能存在1小时的延迟。镜像层(blob)会缓存在第三方对象存储上,当前暂未对内容做检测,计划后续添加检测功能。

快速开始

最简单的使用方式是在原镜像地址前添加m.daocloud.io前缀:

docker run -d -P m.daocloud.io/docker.io/library/nginx

使用方法详解

方法一:增加前缀(推荐方式)

在原镜像地址前添加m.daocloud.io前缀:

              docker.io/library/busybox
                 |
                 V
m.daocloud.io/docker.io/library/busybox

方法二:前缀替换

将原镜像仓库的域名替换为对应的加速域名:

           docker.io/library/busybox
             |
             V
docker.m.daocloud.io/library/busybox

无缓存处理

当拉取的镜像没有缓存时,系统会在同步队列中添加同步缓存的任务。

支持的镜像仓库

以下是支持前缀替换的Registry列表(推荐使用添加前缀的方式):

源站 替换为 备注
docker.elastic.co elastic.m.daocloud.io
docker.io docker.m.daocloud.io
gcr.io gcr.m.daocloud.io
ghcr.io ghcr.m.daocloud.io
k8s.gcr.io k8s-gcr.m.daocloud.io k8s.gcr.io已被迁移到registry.k8s.io
registry.k8s.io k8s.m.daocloud.io
mcr.microsoft.com mcr.m.daocloud.io
nvcr.io nvcr.m.daocloud.io
quay.io quay.m.daocloud.io
registry.ollama.ai ollama.m.daocloud.io 实验内测中

最佳实践

加速Kubernetes

加速安装kubeadm

kubeadm config images pull --image-repository k8s-gcr.m.daocloud.io

加速安装kind

kind create cluster --name kind --image m.daocloud.io/docker.io/kindest/node:v1.22.1

加速Containerd

参考Containerd官方文档:hosts.md

如果使用kubespray安装containerd,可以配置containerd_registries_mirrors

加速Docker

添加到/etc/docker/daemon.

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ]
}

加速Ollama & DeepSeek

加速安装Ollama

CPU版本:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama docker.m.daocloud.io/ollama/ollama

GPU版本:

  1. 首先安装Nvidia Container Toolkit
  2. 运行以下命令启动Ollama容器:
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama docker.m.daocloud.io/ollama/ollama

更多信息请参考:Ollama Docker官方文档

加速使用Deepseek-R1模型(实验内测中)

在启动了ollama容器的前提下,可以通过加速源加速启动DeepSeek相关的模型服务:

# 使用加速源
docker exec -it ollama ollama run ollama.m.daocloud.io/library/deepseek-r1:1.5b

# 或直接使用官方源下载模型
# docker exec -it ollama ollama run deepseek-r1:1.5b
注意:目前Ollama官方源的下载速度已经很快,您也可以直接使用官方源

使用建议

  • 选择合适的时间:建议将拉取任务放在闲时(北京时间01-07点),其他时间段非常拥挤
  • 使用明确版本号:建议使用明确版本号的tag,对于latest这种变更后响应旧数据,并且后台重新同步
  • 了解服务限制:服务有白名单和限流机制,详细信息请参考#2328

相关资源

友情链接:加速二剑客

贡献者

感谢所有为这个项目做出贡献的开发者:

Made with contrib.rocks.

结语

DaoCloud公共镜像加速服务为国内用户提供了便捷的Docker镜像拉取解决方案。通过简单的域名前缀添加或替换,即可显著提升镜像下载速度,解决连接超时问题。希望本文介绍的方法能够帮助您更高效地进行容器化开发和部署。