没有解决科学上网的前提下,国内如果解决访问并下载 Docker 镜像的几种方法!
就在六月初,因为政策问题,导致国内的 Docker Hub
镜像加速器相继停止服务,让严重依赖镜像站过活的用户和企业当头一棒。导致开发、测试和部署工作严重受阻,许多高校的镜像缓存服务也相继停止。面对这一现状,以下是收集了几种主流的解决思路,助你克服限制,顺利获取所需镜像。
1. 更改镜像源
对于镜像全面性不追求的群体
即找找国内目前还可用且没有关闭的 Docker Hub
镜像站,但是目前已知且测试的情况来看,有很多问题。比如,幸存的镜像一般都会有限流限制速和白名单的存在,导致其镜像不全(尤其是个人用户创建的公开镜像)且下载速度不较慢。还有就是安全问题了,很难保证所使用的镜像服务是安全可信的。
目前来说,下面三个还算是比较好点的。需要使用的话,可以在配置文件中添加重启 Docker
服务使其生效。如果都不想使用的话,可以登录自己的阿里云获取对应镜像地址,但是镜像确实不够新,尤其是不热门的项目更甚。
其中,atomhub
所属于开放原子开源基金会,是国内多个大公司成立的非营利机构,标榜的就是 镜像来源安全可信,但目前只有 336
个镜像可以下载和使用。然后,1panel
所属于飞致云,商业容器相关的公司,该站点主要是给 1Panel
产品使用的,目前只有 143
个镜像可以下载和使用。最后,daocloud
所属于道客,也是一家商业容器相关的公司,收录的镜像目前有 596
个,且可要随时提 PR
,增加更多的镜像地址。
当然,还有一些其他的公共镜像站,但是大多是 .ru
相关的,可能是因为之前很早就收到美国和欧洲制裁所有应运而生的。大多都是免费的话,但是其实并不好用。
# 配置方式
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://atomhub.openatom.cn",
"https://docker.1panel.live",
"https://docker.m.daocloud.io",
"https://xxxxxxxx.mirror.aliyuncs.com"
]
}
EOF
# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker.service
# 检测是否生效
$ docker info | grep -A 4 Mirrors
使用其他人的镜像站点不放心的话,可要对下载的镜像进行 check
,判断是否对应镜像和官网的版本是否一致。在官网找到对应版本的 sha256
和本地下载的进行对比。
# 检查
docker inspect d7axxxxe1e65 | grep -A 2 Digest \
| grep sha256 | awk -F: '{print substr($2, 1, 12)}'
2. 自建镜像站点
有一些门槛,如果不付费的话,只能个人或微型公司使用。
事情出来之后,在 Github
上面出现了很多项目来解决上述代理的问题,但是大多数都是薅羊毛来部署个人站点。比如,使用免费域名,使用 docker action
和 Cloudflare Workers
实现服务部署,最后设置自己的代理地址。这里找了三个 Github
上面 Star
数量比较多的项目,有需要的话,可要自行部署。
首先是 CF-Workers-docker.io 项目,是一个基于 Cloudflare Workers
的 Docker
镜像代理工具,能够中转对 Docker
官方镜像仓库的请求,解决一些访问限制和加速访问的问题。简单来说,就是在 _worker.js
写一个对官网的请求代理,因为 Cloudflare
部署的节点是可以访问的。这个 cloudflare-docker-proxy 和 hammal 也是同样的原理。
# 拉取时需要加域名前缀
$ docker pull docker.xxx.io/escape/app:latest
# 或者配置镜像地址
"registry-mirrors": ["https://docker.xxx.io"]
还有,Docker-Proxy 也是利用 Render
或 Koyeb
部署基于官方 Docker Registry
的镜像加速服务。同时,也可以自己部署再国外的服务器上面,充当中传。
version: 0.1
storage:
filesystem:
rootdirectory: /var/lib/registry
delete:
enabled: true
maintenance:
uploadpurging:
enabled: true
age: 168h
dryrun: false
interval: 1m
http:
addr: 0.0.0.0:5000
proxy:
remoteurl: https://registry-1.docker.io
还有,image-mirror 是利用 Github action
来拉取官网 Docker Registry
中需要的镜像,然后同步镜像到自己个人的 阿里云、华为云 的个人版镜像仓库。就目前阿里云来说,提供个人版镜像仓库,限额 3
个 namespace
和 300
个镜像,对于个人足够用了。
3. 学会当魔法师
需要点能力和费用,但是最直接有效!只有魔法才可以打败魔法!
当好魔法师,很多原本因为网络导致的问题都可以轻松解决。使用自建的服务器,配置代理,然后就可以使用了。需要注意的是,配置方式有两种,根据自身情况选择和使用。
- Daemon Configuration
# Linux regular setup: /etc/docker/daemon.json
# Linux rootless mode: ~/.config/docker/daemon.json
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "https://proxy.example.com:3129",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
# restart
$ sudo systemctl restart docker
- Systemd Unit File
# regular install
$ sudo mkdir -p /etc/systemd/system/docker.service.d
$ sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf
# config
$ sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Environment="HTTPS_PROXY=https://proxy.example.com:3129"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
# restart
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
# check
$ sudo systemctl show --property=Environment docker