大神网
大神网

暂无菜单项

首页/文章/技术折腾/
打开 MD 链接

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

大神
发布于 2024/6/21
3

本文将探讨为什么最近国内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_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/[email protected]

    - name: Login to Docker Hub
      uses: docker/[email protected]
      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镜像,继续他们的开发工作。

0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
把实践写下来。AI、教程、杂文与生活。
文章
教程
Skills
关于
关于大神
关于
AI 实践、杂文、生活记录、教程与下载分享。

装箱单空白模板:只记箱件、重量、尺码和唛头,不写货价

2次下载
免费
下载分享
24 000

商业发票空白模板:填写字段、费用说明与核对清单

2次下载
免费
下载分享
20 000

报价单空白模板:列出货价、术语地点、有效期和付款条件

2次下载
免费
下载分享
33 000

散人杂谈 国庆节特别篇|你可以随时打开自己,也可以随时关掉自己

杂文
65 000

从这里开始:大神网会分享什么

杂文
63 000

我在改写你们的过去

杂文
26 000
大神 AI 转型AI 转型把 AI 用进真实工作了解
教程与下载教程下载一步一步能跟着做查看
Skill HubSkill Hub自有 Skill 与工具入口进入
大神网
大神网
首页
文章
AI Hub
生活
小店
导航
社区
教程
关于
大神 · 把实践写下来
AI、教程、杂文与生活
关于文章教程小店隐私政策服务条款退款与交付联系客服
大神网 © 2026