为什么Docker镜像国内拉取失效,如何解决?

本文将探讨为什么最近国内Docker镜像源大规模失效,并提供一个临时解决方案,通过阿里云和GitHub同步镜像,确保Docker镜像的顺利拉取。本文适用于程序员和技术爱好者,希望能帮助大家解决当前的问题。

前言

在2024年6月初,国内Docker镜像源突然大规模失效,包括网易和阿里等几乎所有的镜像源都无法使用。这给广大开发者带来了巨大的不便。本文将详细介绍一个临时解决方案,利用阿里云和GitHub同步Docker镜像,从而保证镜像的顺利拉取。

准备工作

注册阿里云和GitHub账号

作为程序员,拥有阿里云和GitHub账号是基本要求。这里不再赘述注册过程。

阿里云开通容器镜像服务

  1. 登录阿里云:进入容器镜像服务界面。
  2. 使用个人版(免费):创建命名空间(免费版可以创建3个)。
  3. 设置访问凭证:点击访问凭证,设置固定密码。记录好用户名、固定密码和对应的阿里云注册中心地址。

GitHub设置

  1. 安装GitHub CLI工具:下载并安装GitHub CLI工具(例如:gh_2.51.0_linux_amd64.deb)。
  2. 登录GitHub CLI:执行以下命令进行登录操作。
    $ gh auth login
    ? What account do you want to log into? GitHub.com
    ? What is your preferred protocol for Git operations on this host? SSH
    ? Upload your SSH public key to your GitHub account? /home/xxx/.ssh/id_rsa.pub
    ? Title for your SSH key: GitHub CLI
    ? How would you like to authenticate GitHub CLI? Paste an authentication token

    根据提示,选择GitHub.com,并使用Paste an authentication token模式进行认证。

创建Secrets

  1. Fork仓库:从WeiyiGeek/action-sync-images Fork一个新仓库,然后git clone到本地。
  2. 生成命名secret:进入项目目录,执行以下命令生成一个命名secret。
    gh secret set DOCKER_USERNAME
  3. 生成其他secrets:类似的再生成DOCKER_PASSWORDDOCKER_REGISTRY两个secrets,它们的值分别为之前记录下的阿里云中对应的值。

配置GitHub Action脚本

进入.github/worflows目录,修改文件sync-images-dockerHub-example.yml,内容如下:

# 工作流名称
name: Sync-Images-to-DockerHub-Example
# 工作流运行时显示名称
run-name: ${{ github.actor }} is Sync Images to DockerHub.
# 怎样触发工作流
on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
# 工作流程任务(通常含有一个或多个步骤)
jobs:
  syncimages:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Repos
      uses: actions/checkout@v3

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2.9.1

    - name: Login to Docker Hub
      uses: docker/login-action@v2.2.0
      with:
        registry: ${{ secrets.DOCKER_REGISTRY }}
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
        logout: false

    - name: Use Skopeo Tools Sync Image to Docker Hub
      run: |
        #!/usr/bin/env bash
        skopeo copy docker://源docker镜像地址:版本号 \
            docker://registry.cn-hangzhou.aliyuncs.com/命名空间/镜像名称:版本号

修改上述文件中的 源docker镜像地址:版本号命名空间/镜像名称:版本号,然后提交到 GitHub,等待1-2分钟,你就可以在阿里云的镜像仓库里看到刚刚拉取的镜像了。

本地拉取镜像

在本地可以直接拉取阿里云镜像仓库的镜像:

$ docker pull registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2
8.12.2: Pulling from xxx/elasticsearch
43c43af79300: Pull complete 
45d2cdef02ae: Pull complete 
53c867456b94: Pull complete 
4ca545ee6d5d: Pull complete 
5a5296f0a516: Pull complete 
6c446de718e0: Pull complete 
b1e261305ffa: Pull complete 
fb4da479c6c6: Pull complete 
95d1bfc165a8: Pull complete 
49e262de4e33: Pull complete 
Digest: sha256:002b27154428905c74083a4af2e068a01fe15128abb6e50f063054a1df03a01a
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2
registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2

修改镜像标签

使用tag命令修改一下镜像标签:

$ docker tag registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2 elasticsearch:8.12.2 \
    && docker rmi registry.cn-hangzhou.aliyuncs.com/xxx/elasticsearch:8.12.2

至此完成了Docker镜像的下载和标签修改。

结论

在当前国内Docker镜像源大规模失效的情况下,通过阿里云和GitHub同步镜像是一个有效的临时解决方案。希望本文的步骤和技巧能够帮助广大开发者顺利拉取Docker镜像,继续他们的开发工作。

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
指数词

百度还有希望崛起吗?如何重新回到互联网第一梯队?

2024-6-21 10:19:12

指数词

运营一个大型网站需要多少服务器?携程的案例分析

2024-6-21 10:24:30

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索