
— 特色专栏 —
大家好,我是民工哥!
Docker 换源终极攻略!彻底解决Docker镜像下载慢的问题。

你是否遇到过这样的场景:
$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
...
# 然后就是漫长的等待,网速慢得让人怀疑人生 😭
作为一名开发者,最痛苦的事情莫过于等待Docker镜像下载。特别是在国内网络环境下,从Docker Hub拉取镜像简直是一种折磨。
创建或编辑配置文件
# 创建Docker配置目录(如果不存在)
sudo mkdir -p /etc/docker
# 编辑daemon.json文件
sudo vim /etc/docker/daemon.json
添加镜像源配置
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重启Docker服务
# 重新加载配置
sudo systemctl daemon-reload
# 重启Docker服务
sudo systemctl restart docker
# 检查服务状态
sudo systemctl status docker
# 临时设置镜像源
docker --registry-mirror=https://registry.cn-hangzhou.aliyuncs.com pull nginx

{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
]
}
应用并重启:点击"Apply & Restart"
# 创建配置目录
mkdir -p ~/.docker
# 创建daemon.json文件
cat > ~/.docker/daemon.json << EOF
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
]
}
EOF
# 重启Docker Desktop
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
],
"insecure-registries": [],
"debug": false,
"experimental": false
}
应用设置:点击"Apply & Restart"
# 创建配置目录
New-Item -Path "$env:USERPROFILE\.docker" -ItemType Directory -Force
# 创建配置文件
@'
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
]
}
'@ | Out-File -FilePath "$env:USERPROFILE\.docker\daemon.json" -Encoding UTF8
# 查看Docker系统信息
docker info
# 查找Registry Mirrors部分
docker info | grep -A 10 "Registry Mirrors"
期望输出:
Registry Mirrors:
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
# 删除本地镜像(如果存在)
docker rmi nginx:latest
# 测试拉取速度
time docker pull nginx:latest
#!/bin/bash
# 创建测试脚本 test_docker_speed.sh
echo"=== Docker镜像拉取速度测试 ==="
# 测试镜像列表
images=("nginx:latest""redis:latest""mysql:8.0")
for image in"${images[@]}"; do
echo"\n测试镜像: $image"
docker rmi $image 2>/dev/null
echo"开始拉取..."
start_time=$(date +%s)
docker pull $image
end_time=$(date +%s)
duration=$((end_time - start_time))
echo"拉取完成,耗时: ${duration}秒"
done
{
// 镜像源配置(核心)
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
],
// 不安全的镜像仓库(HTTP协议)
"insecure-registries": [
"192.168.1.100:5000"
],
// 日志配置
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
// 存储驱动配置
"storage-driver": "overlay2",
// DNS配置
"dns": ["8.8.8.8", "114.114.114.114"],
// 实验性功能
"experimental": false,
// 调试模式
"debug": false
}
Docker会按照配置顺序尝试镜像源,如果第一个失败会自动尝试下一个:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
]
}
{
"registry-mirrors": [
"http://harbor.company.com", // 企业内部Harbor
"https://registry.cn-hangzhou.aliyuncs.com"
],
"insecure-registries": [
"harbor.company.com"
],
"proxies": {
"default": {
"httpProxy": "http://proxy.company.com:8080",
"httpsProxy": "http://proxy.company.com:8080",
"noProxy": "localhost,127.0.0.1,harbor.company.com"
}
}
}
可能原因:
解决方案:
# 1. 检查配置文件语法
sudo docker info 2>&1 | grep -i error
# 2. 验证JSON格式
cat /etc/docker/daemon.json | python -m json.tool
# 3. 重启Docker服务
sudo systemctl restart docker
# 4. 测试不同镜像源
curl -I https://registry.cn-hangzhou.aliyuncs.com/v2/
错误信息:
permission denied while trying to connect to the Docker daemon socket
解决方案:
# 将用户添加到docker组
sudo usermod -aG docker $USER
# 重新登录或执行
newgrp docker
# 或者使用sudo
sudo docker pull nginx
检查步骤:
# 1. 确认配置文件位置
ls -la /etc/docker/daemon.json
# 2. 检查文件权限
sudo chmod 644 /etc/docker/daemon.json
# 3. 验证JSON格式
sudo cat /etc/docker/daemon.json | jq .
# 4. 查看Docker日志
sudo journalctl -u docker.service --no-pager
诊断命令:
# 测试网络连通性
ping registry.cn-hangzhou.aliyuncs.com
# 测试HTTPS连接
curl -v https://registry.cn-hangzhou.aliyuncs.com/v2/
# 检查DNS解析
nslookup registry.cn-hangzhou.aliyuncs.com
# 创建配置备份
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup
# 使用版本控制管理配置
git init /etc/docker
git add daemon.json
git commit -m "Initial Docker daemon configuration"
# 定期检查镜像源状态
#!/bin/bash
mirrors=(
"https://registry.cn-hangzhou.aliyuncs.com"
"https://mirror.ccs.tencentyun.com"
"https://hub-mirror.c.163.com"
)
for mirror in "${mirrors[@]}"; do
echo "Testing $mirror"
curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" "$mirror/v2/"
done
#!/bin/bash
# docker_mirror_setup.sh - Docker镜像源自动配置脚本
set -e
echo"🚀 Docker镜像源自动配置脚本"
echo"================================"
# 检查Docker是否安装
if ! command -v docker &> /dev/null; then
echo"❌ Docker未安装,请先安装Docker"
exit 1
fi
# 备份现有配置
if [ -f "/etc/docker/daemon.json" ]; then
echo"📋 备份现有配置..."
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup.$(date +%Y%m%d_%H%M%S)
fi
# 创建配置目录
sudo mkdir -p /etc/docker
# 写入新配置
echo"⚙️ 配置镜像源..."
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://s4uv0fem.mirror.aliyuncs.com",
"https://docker.1ms.run",
"https://registry.dockermirror.com",
"https://docker.m.daocloud.io",
"https://docker.kubesre.xyz",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://hub.littlediary.cn",
"https://proxy.1panel.live",
"https://docker.1panelproxy.com",
"https://image.cloudlayer.icu",
"https://docker.1panel.top",
"https://docker.anye.in",
"https://docker-0.unsee.tech",
"https://hub.rat.dev",
"https://hub3.nat.tf",
"https://docker.1ms.run",
"https://func.ink",
"https://a.ussh.net",
"https://docker.hlmirror.com",
"https://lispy.org",
"https://docker.yomansunter.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://dytt.online",
"https://docker.xiaogenban1993.com",
"https://dockerpull.cn",
"https://docker.zhai.cm",
"https://dockerhub.websoft9.com",
"https://dockerpull.pw",
"https://docker-mirror.aigc2d.com",
"https://docker.sunzishaokao.com",
"https://docker.melikeme.cn"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
# 重启Docker服务
echo"🔄 重启Docker服务..."
sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证配置
echo"✅ 验证配置..."
if docker info | grep -q "Registry Mirrors"; then
echo"🎉 配置成功!镜像源已生效"
docker info | grep -A 5 "Registry Mirrors"
else
echo"❌ 配置失败,请检查配置文件"
exit 1
fi
echo"\n🚀 配置完成!现在可以享受飞速的镜像下载了!"
# docker-compose.yml
version:'3.8'
services:
web:
image:nginx:latest
ports:
-"80:80"
# 使用镜像源后,这个镜像下载会很快
db:
image:mysql:8.0
environment:
MYSQL_ROOT_PASSWORD:password
# 大镜像也能快速下载
现在,告别Docker镜像下载慢的痛苦,享受飞速的开发体验吧!🚀
链接:https://blog.csdn.net/auok_coder/art icle/details/151195117
👍 既然都看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~