Featured image of post Docker Hub 镜像下架解决方案

Docker Hub 镜像下架解决方案

由于 Docker Hub 镜像下架,国内开发者面临无法正常拉取镜像的问题。本文介绍了四种解决方案:使用 AtomHub 镜像站点(官方背书但镜像数量有限)、配置 VPN 代理(需自备服务且速度不稳定)、使用 Skopeo 拷贝镜像到私有镜像仓库(需海外云主机)以及部署 Docker-Proxy 项目搭建私有镜像仓库。文章详细介绍了每种方案的操作步骤以及注意事项,帮助开发者应对 Docker Hub 镜像下架带来的挑战。

Docker Hub 镜像下架解决方案

Docker Hub 作为 Docker 官方的镜像仓库,拥有着丰富的镜像资源, 极大地方便了开发者获取和使用各种软件和服务。然而,从 2024 年 6 月 6 日开始,国内各大镜像站点陆续出现了 Docker Hub 镜像下架的情况,包括阿里云、科大、南大、上交等全部挂掉,导致很多开发者无法正常拉取镜像。在执行 docker pull 命令拉取镜像 docker 镜像时无反应,会一直循环尝试。

2024-06-13_takedown-dockerhub

Docker Hub 镜像下架的可能原因主要为一些镜像包含违规内容,导致上面信息监管部门出了最新要求,要求各大镜像站点下架相关镜像。

解决方案

面对 Docker Hub 镜像下架问题,目前我们可以通过以下几种方式解决:

1. 使用 AtomHub 镜像站点

AtomHub 是由开放原子开源基金会发起,遵循 OCI 标准,旨在为开发者提供开放中立、安全可信、高效便捷的新一代开源容器镜像中心。其具有官方背书,是当前唯一正常的 Docker Hub 镜像站点。

不过,AtomHub 的问题是镜像数量较少,目前只有几百个镜像文件;以及,部分软件的版本较旧。

配置 AtomHub 镜像站点

  • 修改 /etc/docker/daemon.json 文件,添加以下内容:
{
  "registry-mirrors": ["https://atomhub.openatom.cn"]
}

重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

然后就可以正常拉取一些常用镜像了。但是,如果你需要的镜像不在 AtomHub 上,这个方法就不适用了。

2. 配置 VPN 代理

通过配置 VPN 代理,可以访问被屏蔽的 Docker Hub 源站点,从而拉取镜像。但是,这种方法需要自备 VPN 服务,且速度可能较慢且不稳定。

配置方法

  • 创建 /etc/systemd/system/docker.service.d/http-proxy.conf 文件,并添加以下内容:
[Service]
Environment="HTTP_PROXY=http://your_proxy_server:port"
Environment="HTTPS_PROXY=http://your_proxy_server:port"
  • 重启 Docker 服务:
sudo systemctl daemon-reload
sudo systemctl restart docker

3. 使用 Skopeo 拷贝镜像到私有镜像仓库

Skopeo 是一个命令行工具,可以用于在不同的镜像仓库之间复制、检查和签名镜像。该方法需要一台海外云主机,且需要没有被墙。

具体步骤

这里以阿里云私有镜像仓库为例,将 Docker Hub 上的镜像复制到阿里云私有镜像仓库。

2024-06-13_aliyun-container
  • 进入个人实例,创建一个命名空间:
2024-06-13_create-namespace
  • 创建一个镜像仓库(对应你想要复制的镜像):
2024-06-13_create-repository
  • 设置访问凭证:
2024-06-13_set-pass
  • 然后,登录到你的海外云主机,先安装 Skopeo:
sudo apt-get update && sudo apt-get install -y skopeo
  • 使用 Skopeo 拷贝镜像:
docker login --username=yourusername registry.cn-hangzhou.aliyuncs.com
skopeo copy docker://docker.io/library/image:tag docker://registry.cn-hangzhou.aliyuncs.com/yournamespace/yourimage:tag

4. 部署私有镜像仓库

除了以上方法,还可以通过最近一大佬开源的 Docker-Proxy 项目搭建自己的私有镜像仓库。

dqzboy
/
Docker-Proxy
Waiting for api.github.com...
0
0
unkown
Waiting...

该方法也需要一台海外云主机,且需要没有被墙;以及一个域名(不需要备案)。

部署

目前项目提供了三种部署方式,我采用的是第一种方式,使用项目脚本一键部署。

  • 使用项目脚本一键部署:
# CentOS
yum -y install wget curl
# ubuntu
apt -y install wget curl

bash -c "$(curl -fsSL https://raw.githubusercontent.com/dqzboy/Docker-Proxy/main/install/DockerProxy_Install.sh)"
  • 部署到 Render

  • Docker Compose 部署

    1. 下载 config 目录下对应的 yml 文件到你本地机器上
    2. 下载 docker-compose.yaml 文件到你本地机器上,并且与配置文件同级目录下
    3. 执行 docker compose 命令启动容器服务
    docker compose up -d
    
    # 查看容器日志
    docker logs -f [容器 ID 或名称]
    

最后,需要登录域名解析方,将 hubgcrghcrk8s-gcruiquay 等 A 记录解析到你的海外云主机 IPv4 地址,然后就可以将 /etc/docker/daemon.json 中的 registry-mirrors 设置为 https://hub.yourdomain 进行镜像加速了。

Licensed under CC BY-NC-SA 4.0
本博客已稳定运行
发表了70篇文章 · 总计295.52k字
Welcome to cuterwrite's blog!
使用 Hugo 构建
主题 StackJimmy 设计
基于 v3.25.0 分支版本修改