### [为什么Docker镜像国内拉取失效,如何解决?](https://dashen.wang/article/32355) **Published:** 2024-06-21T02:22:52 **Author:** 大神 **Excerpt:** 本文将探讨为什么最近国内Docker镜像源大规模失效,并提供一个临时解决方案,通过阿里云和GitHub同步镜像,确保Docker镜像的顺利拉取。本文适用于程序员和技术爱好者,希望能帮助大家解决当前的问题。 前言 在2024年6月初,国内Docker镜像源突然大规模失效,包括网易和阿里等几乎所有的镜像源都无法使用。这给广大开发者带来了巨大的不便。本文将详细介绍一个临时解决方案,利用阿里云和GitHub同步Docker镜像,从而保证镜像的顺利拉取。 准备工作 注册阿里云和GitHub账号 作为程序员,拥有阿里云和GitHub账号是基本要求。这里不再赘述注册过程。 阿里云开通容器镜像服务 登录阿里云:进入容器镜像服务界面。 使用个人版(免费):创建命名空间(免费版可以创建3个)。 设置访问凭证:点击访问凭证,设置固定密码。记录好用户名、固定密码和对应的阿里云注册中心地址。 GitHub设置 安装GitHub CLI工具:下载并安装GitHub CLI工具(例如:gh_2.51.0_linux_amd64.deb)。 登录GitHub CLI:执行以下命令进行登录操作。 根据提示,选择GitHub.com,并使用Paste an authentication token模式进行认证。 创建Secrets Fork仓库:从WeiyiGeek/action-sync-images Fork一个新仓库,然后git clone到本地。 生成命名secret:进入项目目录,执行以下命令生成一个命名secret。 生成其他secrets:类似的再生成 和 两个secrets,它们的值分别为之前记录下的阿里云中对应的值。 配置GitHub Action脚本 进入 目录,修改文件 ,内容如下: 修改上述文件中的 和 ,然后提交到 GitHub,等待1-2分钟,你就可以在阿里云的镜像仓库里看到刚刚拉取的镜像了。 本地拉取镜像 在本地可以直接拉取阿里云镜像仓库的镜像: 修改镜像标签 使用 命令修改一下镜像标签: 至此完成了Docker镜像的下载和标签修改。 结论 在当前国内Docker镜像源大规模失效的情况下,通过阿里云和GitHub同步镜像是一个有效的临时解决方案。希望本文的步骤和技巧能够帮助广大开发者顺利拉取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](https://github.com/WeiyiGeek/action-sync-images) Fork一个新仓库,然后git clone到本地。 2. **生成命名secret**:进入项目目录,执行以下命令生成一个命名secret。 ``` gh secret set DOCKER_USERNAME ``` 3. **生成其他secrets**:类似的再生成`DOCKER_PASSWORD`和`DOCKER_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镜像,继续他们的开发工作。 **Tags:** Linux, 开源, 教程 **Categories:** 技术折腾 ---