暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker:一招解决最近拉取失败的问题

拾荒的小海螺 2024-08-26
1856

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.iol5d.m.daocloud.io将废弃请使用添加前缀的方式
    docker.elastic.coelastic.m.daocloud.io
    docker.iodocker.m.daocloud.io
    gcr.iogcr.m.daocloud.io
    ghcr.ioghcr.m.daocloud.io
    k8s.gcr.iok8s-gcr.m.daocloud.iok8s.gcr.io 已被迁移到 registry.k8s.io 
    registry.k8s.iok8s.m.daocloud.io
    mcr.microsoft.commcr.m.daocloud.io
    nvcr.ionvcr.m.daocloud.io
    quay.ioquay.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 拉取失败的问题有所帮助!

                你可以根据实际情况选择不同的国内镜像源,并确保网络环境稳定,以进一步提升开发效率。如果有其他问题,欢迎留言讨论。


                文章转载自拾荒的小海螺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论