dockerhub 被墙之后,导致docker pull不下来、push不上去,造成了一点麻烦。
可以给docker增加代理,这样不仅能pull也能push。下面的方法只能解决pull。
vim /etc/systemd/system/docker.service.d/http-proxy.conf
# appnd
[Service]
Environment="HTTP_PROXY=proxy.example.com:80"
Environment="HTTPS_PROXY=proxy.example.com:443"
依赖赛博佛祖Cloudflare,使用无服务器,自建Docker仓库镜像代理,部署方法详见链接,
docker pull {workers.dev}/nginx
上面的方法只能解决dockerhub的镜像,还有其他的镜像仓库拉取不下来,比如gcr.io、ghcr.io、registry.k8s.io、quay.io、mcr.microsoft.com。
这就需要使用第二个工具了crproxy
部署也是很简单,可以在外面的服务器上部署,也可以在内网服务器上部署,
version: "3"
services:
crproxy:
image: ghcr.io/daocloud/crproxy/crproxy:v0.9.1
container_name: crproxy
restart: unless-stopped
ports:
- 80:8080
- 443:8080
command: |
--acme-cache-dir=/tmp/acme
--acme-hosts=*
--default-registry=docker.io
tmpfs:
- /tmp/acme
# 非必须, 如果这台服务器无法畅通的达到你要的镜像仓库可以尝试配置
environment:
- https_proxy=http://proxy:8080
- http_proxy=http://proxy:8080
docker pull 你的域名/hello-world -> docker pull hello-world
也可以添加到 /etc/docker/daemon.json,减少域名
{
"registry-mirrors": ["https://你的域名"]
}
没有域名的话,也可以直接使用ip地址加端口的方式,没有证书认证的需要在/etc/docker/daemon.json配置
{ "insecure-registries": ["192jj.168.1.87:8844"] }
如果你有一台vps,正好在部署了xtls,可以使用它的fallback,那么可以复用这个vps
{
"name": "你的域名",
"dest": 8443, # 上面cproxy监听的端口
"xver": 0
}
怎么在k8s使用上面提供的镜像代理呢。
我写了一个mutating webhook,会把特定前缀的镜像,改成新的镜像,这样就可以在k8s上拉去被墙的镜像了。
使用方法见readme.md
没有域名,使用 CF-Workers-docker 部署一个worker,用来下载docker的镜像。
有域名,使用crproxy 部署一个容器,用来下载所有镜像。
有在 k8s 下使用的需求,可以使用mutating webhook,部署时自动修改镜像。