当前位置:   article > 正文

Docker无法拉取镜像!如何解决?

docker无法拉取镜像

问题现象

  • 继去年Docker Hub被xxx后,各大NAS的注册表均出现问题,例如群晖的Docker套件注册表无法连接(更新至DSM7.2版本后恢复)。
  • 而在今年2024年6月初(约2024.06.06),NAS中最重要的工具Docker又面临无法使用的问题。
  • 常用镜像站:阿里云、科大、南大、上交等,全部挂掉。
  • 执行docker pull命令拉取docker镜像时无反应,一直在循环尝试。

猜测原因

  • 下面的说法来源于网络
  • 2024.06.06,上海交大的Docker Hub镜像加速器宣布因为监管要求被下架。
  • index服务器被DNS污染,导致无法拉取镜像。
  • 做好全面脱钩的准备
  • 自主知识产权的国产Docker将会横空出世
  • 临时性管控(过段时间就恢复)
  • 全面清理Docker Hub中被恶意植入的文件
  • 以及等等说法~

如何解决?

        使用Github Action 优雅的同步Docker Hub的镜像到阿里云个人镜像仓库中,再从阿里云个人镜像仓库中直接拉取镜像,就能完美的解决docker不能拉取镜像的问题.

Github Action 是什么?

        GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

        GitHub Actions 不仅仅是 DevOps,还允许您在存储库中发生其他事件时运行工作流程。 例如,您可以运行工作流程,以便在有人在您的存储库中创建新问题时自动添加相应的标签。

        使用 Github Action,开发人员可以自动执行各种任务,以便更加高效地管理和自动化他们的开发工作流程,减少手动操作和人为错误,提高开发效率和代码质量

参考地址: https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions

操作流程

      1.在阿里云创建个人镜像仓库。

       1.1  登录容器镜像服务控制台,点击创建个人实例。

       1.2 点击个人实例,进入仓库管理

        

        1.3 点击左侧命名空间,创建命名空间。

         1.4 点击左侧访问凭证,设置固定密码,其中用户名,仓库地址和固定密码,在下面会用到。

2. 在 Github 创建 Github Action 拉取镜像脚本

        2.1 在Github中创建账户以及仓库,此处作者创建的仓库名为docker-images,并在目录下创建一个.github/workflows 目录用于存放Github Action 镜像拉取同步脚本,如下图所示

项目地址GitHub - yongheng1065/docker-images: Github Action 拉取国外镜像

2.2 之后,创建一个sync-image-example.yml及其内容,如下所示:

 内容详情如下:

  1. # 1.首先,在workflow文件中定义触发器,例如每次推送到主分支时触发同步操作。
  2. # 工作流名称
  3. name: Sync Image to Aliyun Example
  4. # 怎样触发工作流
  5. on:
  6. push:
  7. branches: [ "main" ]
  8. pull_request:
  9. branches: [ "main" ]
  10. # 2.添加一个job来执行同步操作。在workflow文件中,添加一个job 并指定使用的操作系统环境。
  11. # 工作流程任务(通常含有一个或多个步骤)
  12. jobs:
  13. build:
  14. runs-on: ubuntu-latest
  15. # 在job中添加步骤来执行同步操作。在上述job中,添加步骤来执行skopeo命令,从docker.io仓库拉取镜像,并将其推送到阿里云个人仓库。
  16. steps:
  17. - name: Git pull
  18. uses: actions/checkout@v3
  19. - name: Set up Docker Buildx
  20. uses: docker/setup-buildx-action@v2.9.1
  21. # 设置项目Secrets以提供Docker Hub登录所需的用户名和密码。
  22. - name: Login to Docker Hub
  23. uses: docker/login-action@v2.2.0
  24. with:
  25. registry: registry.cn-guangzhou.aliyuncs.com
  26. username: ${{secrets.DOCKER_USERNAME}}
  27. password: ${{secrets.DOCKER_PASSWORD}}
  28. logout: false
  29. # 使用shell命令批量同步所需的镜像到阿里云个人仓库中
  30. - name: Use Skopeo Tools Sync Image to Docker Hub
  31. run: |
  32. # 使用 skopeo 工具将镜像同步到阿里云个人仓库中,使用时请自行源和目标修改仓库名称和镜像名称
  33. skopeo copy docker://docker.io/userxy2015/ngnix:latest docker://registry.cn-guangzhou.aliyuncs.com/gorgor1065/ngnix:latest

   2.3 在 Github中设置username和password的秘钥值

        2.3.1 首先点击Settings。

        2.3.2 点击 Secrets and variables --》 Actions --》Secrets --》 New repository secret 创建用户名和密码的变量,值是在上面1.4步骤的页面获取。

2.4 上面的sync-image-example.yml配置中,最后一行,使用skopeo工具将镜像同步到个人仓库的时候,需要修改源镜像名称和同步到个人仓库时的镜像名称。

        2.4.1 docker://docker.io/userxy2015/ngnix:latest:dockerhub仓库的镜像,你需要什么镜像,就需要访问dockerhub官网,搜索对应的镜像,然后替换掉docker://docker.io/userxy2015/ngnix:latest的地址,如果你要同步mysql到阿里云的个人仓库,则地址就写成docker://docker.io/mysql:5.5.42 就可以。

        2.4.2 docker://registry.cn-guangzhou.aliyuncs.com/gorgor1065/ngnix:latest: 同步到个人仓库的地址。此地址需要在 步骤1.4 中获取仓库地址拼上 步骤1.3 中的命名空间,再拼上同步到个人仓库的镜像名称就可以。

3. 点击Actions 运行脚本,将dockerhub的镜像拉取到阿里云个人仓库中。但点击Actions时需要注意,每次都要有commit之后,点击Actions才其效果。

 运行成功如下面那样,会有绿色的√

此时在阿里云个人仓库就会有我们从国外dockerhub拉取的nginx。

 再点击ngnix,就会显示ngnix镜像的基本信息,就可以在我们服务器中从我们个人仓库中拉取惊喜镜像。

 在服务中,从阿里云个人仓库拉取镜像,可以看出可以正常的拉取了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/917723
推荐阅读
相关标签
  

闽ICP备14008679号