随着国内访问Docker Hub的困难日益增加,开发者们迫切需要找到有效的替代方案来正常拉取Docker镜像。本文将介绍几种不同的解决方案,以帮助开发者们绕过这些障碍。


(一)零门槛解决方案
境外镜像服务

优点:无需大量修改配置,只需几个命令即可完成设置。

缺点:由于地理位置的原因,网络连接可能会慢或不稳定。

俄罗斯由于受到美国制裁,同样面临访问Docker Hub的难题。我们可以通过使用俄罗斯的镜像服务来间接访问Docker Hub。以下是具体的配置命令:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://huecker.io",
        "https://dockerhub.timeweb.cloud",
        "https://noohub.ru"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
使用一键脚本事先拉取相应的镜像

优点:无需大量修改配置,只需一行命令即可拉取镜像。

缺点:临时使用,大量使用还是用其它方式。

bash -c "$(curl -fsSL https://cn.bbc.us.kg/docker-pull.sh)" -- <镜像名称> [可选镜像存放地址]
  • 1.

例子:

bash -c "$(curl -fsSL https://cn.bbc.us.kg/docker-pull.sh)" -- nginx:latest
  • 1.


镜像导出与导入

优点:在项目部署中非常方便使用。

缺点:镜像文件可能较大,复制和迁移时会稍显麻烦。

如果你在一个服务器上已经成功拉取了所需的镜像,可以将其导出并在其他服务器上导入。以下是导出和导入镜像的命令:

导出镜像到文件:

docker save -o

示例:docker save -o nginx.tar nginx

将镜像文件复制到其他服务器并导入:

docker load -i

示例:docker load -i nginx.tar


Yandex容器加速

优点:适合单独拉取镜像使用,由俄罗斯大厂Yandex提供服务。

缺点:不支持配置到daemon.json。

使用Yandex的镜像服务,可以直接通过指定的仓库地址来拉取镜像,例如:

docker pull cr.yandex/mirror/nginx


(二)低门槛解决方案

Docker使用HTTP代理

优点:可以直接从Docker官方拉取镜像。

缺点:使用完毕后需要关闭HTTP代理。

如果你的代理软件能够访问Docker Hub官网,可以通过设置HTTP代理来让Docker使用代理进行镜像拉取。以下是设置HTTP代理的步骤:

新建目录:

mkdir -p /etc/systemd/system/docker.service.d 在该目录下新建一个配置文件,例如http-proxy.conf,并填入以下内容(请替换和为你的代理服务器的内网IP和端口):

[Service] Environment="HTTP_PROXY=http://:" Environment="HTTPS_PROXY=http://:" Environment="NO_PROXY= your-registry.com,10.10.10.10,*.example.com" 重启Docker服务以应用配置更改:

systemctl daemon-reload systemctl restart docker 检查环境变量是否已正确设置:

systemctl show --property=Environment docker


(三)高门槛解决方案

Cloudflare反向代理

优点:只需拥有Cloudflare账号即可,可以创建个人专属的代理服务,无需自行签发证书。

缺点:Cloudflare在国内可能会遇到DNS污染问题,导致无法正常访问。

简要步骤如下:

登录到Cloudflare控制面板: https://dash.cloudflare.com/ 在左侧菜单选择Workers and Pages,然后创建一个新的Worker。 编辑Worker的代码,使用JavaScript编写反向代理逻辑。 创建并部署Worker。 绑定自定义域名,如果没有域名,可以访问相关博客文章了解如何获取免费域名。 示例的worker.js内容可能如下所示,但请注意,这只是一个基础示例,您需要根据实际情况进行调整:

// worker.js 示例代码

addEventListener('fetch', event => {

event.respondWith(handleRequest(event.request))

})

async function handleRequest(request) {

const url = new URL(request.url);

const path = url.pathname;

const registryHost = " registry-1.docker.io";

// 省略其他代码...

}

Nginx反向代理

优点:如果您拥有一台境外服务器,可以使用Nginx作为反向代理来访问Docker Hub。

缺点:网络连接可能会慢或不稳定,且需要自行处理SSL证书等安全问题。

配置Nginx的基本示例如下,但请根据您的服务器和域名情况进行调整:

nginx.conf 示例配置

server { listen 443 ssl; server_name  your-domain.com;

ssl_certificate /path/to/certificate; ssl_certificate_key /path/to/key;

省略其他配置...

location / { proxy_pass  https://registry-1.docker.io; # 省略其他代理配置... } } 其他开源项目

LightMirrors:一个开源的Docker镜像加速项目。 registry-mirror:另一个开源的Docker Hub镜像加速方案。

高门槛解决方案通常需要更多的技术知识和配置工作,但它们提供了更稳定和个性化的访问方式。在选择这些方案时,请确保您具备相应的技术能力,并考虑到可能的安全和维护问题。同时,随着国内云服务商提供的私有镜像服务越来越成熟,您也可以考虑将这些服务作为替代方案。


结语

上述方法提供了多种不同的途径来解决国内访问Docker Hub的问题。临时使用时,建议选择零门槛方案中的几个,这些方案方便快捷。同时,考虑到未来可能pip源也会受到影响,采用HTTP代理方式也是一个可行的选择。此外,国内云服务商如阿里云、腾讯云等也提供了私有镜像服务,值得尝试。