# Docker Hub 镜像下架解决方案
Docker Hub 作为 Docker 官方的镜像仓库,拥有着丰富的镜像资源, 极大地方便了开发者获取和使用各种软件和服务。然而,从 2024 年 6 月 6 日开始,国内各大镜像站点陆续出现了 Docker Hub 镜像下架的情况,包括阿里云、科大、南大、上交等全部挂掉,导致很多开发者无法正常拉取镜像。在执行 docker pull
命令拉取镜像 docker 镜像时无反应,会一直循环尝试。
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 上的镜像复制到阿里云私有镜像仓库。
- 首先,你需要启用阿里云容器镜像服务 ,创建一个个人实例:
- 进入个人实例,创建一个命名空间:
- 创建一个镜像仓库(对应你想要复制的镜像):
- 设置访问凭证:
- 然后,登录到你的海外云主机,先安装 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 项目搭建自己的私有镜像仓库。
该方法也需要一台海外云主机,且需要没有被墙;以及一个域名(不需要备案)。
# 部署
目前项目提供了三种部署方式,我采用的是第一种方式,使用项目脚本一键部署。
- 使用项目脚本一键部署:
# 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 部署
- 下载 config 目录下对应的 yml 文件到你本地机器上
- 下载 docker-compose.yaml 文件到你本地机器上,并且与配置文件同级目录下
- 执行
docker compose
命令启动容器服务
docker compose up -d # 查看容器日志 docker logs -f [容器 ID 或名称]
最后,需要登录域名解析方,将 hub
、gcr
、ghcr
、k8s-gcr
、ui
、quay
等 A 记录解析到你的海外云主机 IPv4 地址,然后就可以将 /etc/docker/daemon.json
中的 registry-mirrors 设置为 https://hub.yourdomain
进行镜像加速了。