内容提要
几个月前,中国大陆失去了公共的dockerhub镜像。有人使用Cloudflare Workers、nginx和自建registry来自建dockerhub反代。作者选择使用caddy,因为配置简单且访问质量好。作者使用mitmproxy抓包,配置dockerd使用本机8080端口进行代理。作者在systemd服务中设置代理环境变量。作者成功拉取了一个较小的docker镜像。作者解释了三个域名需要反代的原因,并给出了反代的方法。作者还介绍了如何设置docker使用反代。最后,作者建议验证是否成功反代。
关键要点
-
几个月前,中国大陆失去了公共的dockerhub镜像,导致用户无法拉取镜像。
-
作者选择使用caddy进行dockerhub反代,因其配置简单且访问质量好。
-
使用mitmproxy抓包以了解docker从dockerhub拉取镜像的过程。
-
在systemd服务中设置代理环境变量,以便docker能够通过本地代理拉取镜像。
-
成功拉取了一个较小的docker镜像,验证了反代的有效性。
-
三个域名需要反代,分别是registry-1.docker.io、auth.docker.io和production.cloudflare.docker.com。
-
提供了反代的具体方法,包括如何处理响应头中的字段。
-
介绍了如何设置docker使用反代,包括修改docker命令和daemon.json配置。
-
建议通过抓包验证反代是否成功。
延伸问答
为什么中国大陆失去了公共的dockerhub镜像?
由于众所周知的原因,中国大陆境内失去了所有公共的dockerhub镜像。
使用Caddy进行dockerhub反代的优势是什么?
Caddy的配置简单,且通过境外服务器进行反向代理的访问质量优于Cloudflare。
如何设置docker使用反代?
可以在docker命令前加上反代域名,或修改/etc/docker/daemon.json文件设置registry-mirrors。
反代过程中需要处理哪些域名?
需要反代的域名包括registry-1.docker.io、auth.docker.io和production.cloudflare.docker.com。
如何验证dockerhub反代是否成功?
可以通过抓包检查请求是否走了自己的域名,或者观察镜像下载速度。
在systemd服务中如何设置代理环境变量?
可以在/etc/systemd/system/docker.service.d/http-proxy.conf中设置HTTP_PROXY和HTTPS_PROXY环境变量。