1、简述
最近使用 Docker 的过程中,很多开发者可能遇到过 Docker 镜像拉取失败的问题。这种情况往往与网络环境、DNS 配置或者 Docker 的镜像源有关。国内很多镜像源无法使用,本文将介绍一种快速有效的解决方案,帮助你在遇到 Docker 镜像拉取失败时,立即恢复正常工作。
GitHub地址:https://github.com/DaoCloud/public-image-mirror?tab=readme-ov-file
2、问题表现
当你在终端执行 docker pull 命令时,可能会遇到以下错误信息:
[root@localhost rabbitmq]# docker-compose up -d
WARN[0000] /data/rabbitmq/docker-compose.yml: `version` is obsolete
[+] Running 0/10
⠙ rabbitmq [⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 135.1s
⠏ 857cc8cb19c0 Retrying in 1 second 113.9s
⠏ e831d571de41 Retrying in 1 second 113.9s
⠏ 7f4e4530a27e Retrying in 1 second 113.9s
⠏ 2bbef6c00dc5 Waiting 113.9s
⠏ e88f524a2370 Waiting 113.9s
⠏ 46b865c7fc1a Waiting 113.9s
⠏ 99e4e364f4cf Waiting 113.9s
⠏ d7fdc9a8b59f Waiting 113.9s
⠏ 822d441969cb Waiting 113.9s
error pulling image configuration: download failed after attempts=6: dial tcp 199.59.148.7:443: connect: connection refused
3、替换前缀
推荐使用添加前缀的方式,前缀替换的 Registry 的规则, 这是人工配置的, 有需求提可以在GItHub提需求。
源站 | 替换为 | 备注 |
---|---|---|
cr.l5d.io | l5d.m.daocloud.io | 将废弃请使用添加前缀的方式 |
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 |
增加前缀 (推荐方式)。比如:
docker.io/library/busybox
|
V
m.daocloud.io/docker.io/library/busybox
或者 支持的镜像仓库 的 前缀替换 就可以使用。比如:
docker.io/library/busybox
|
V
docker.m.daocloud.io/library/busybox
4、kubeadm
K8s 通过 kubeadm 来拉取镜像,替换镜像repository。
- 通过 加速 安装 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
- 通过 加速 部署 应用(这里以 Ingress 为例)
wget -O image-filter.sh https://github.com/DaoCloud/public-image-mirror/raw/main/hack/image-filter.sh && chmod +x image-filter.sh
wget -O deploy.yaml https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml
cat ./deploy.yaml | ./image-filter.sh | kubectl apply -f -
5、设置加速器
因大多镜像是国外的,国内的镜像大多数不行,可以快点下载对应的镜像。您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
6、总结
Docker 镜像拉取失败的问题在开发中并不少见,但通过配置国内镜像源,这个问题通常可以快速解决。本文介绍的方法简单高效,适合开发者在遇到拉取问题时快速恢复正常工作。如果你有更复杂的需求,可能需要进一步检查网络配置或考虑其他优化方案。
希望这篇文章能对你解决 Docker 拉取失败的问题有所帮助!
你可以根据实际情况选择不同的国内镜像源,并确保网络环境稳定,以进一步提升开发效率。如果有其他问题,欢迎留言讨论。
评论区