新站分享
由于国内网络在拉取 docker 镜像时会很慢,经常卡住,于是部署了一个 docker 镜像代理加速服务,有需求的朋友可以收藏使用.
https://dockerproxy.com
详情参考网站文档使用.
本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.
由于国内网络在拉取 docker 镜像时会很慢,经常卡住,于是部署了一个 docker 镜像代理加速服务,有需求的朋友可以收藏使用.
详情参考网站文档使用.
47 条评论
我想通过 nexus 搭建一个带缓存的 代理,却不知道怎么配置,配置一直报错。
请求添加 kaniko 的 UA :https://github.com/GoogleContainerTools/kaniko (11.6K stars, kaniko is a tool to build container images from a Dockerfile, inside a container or Kubernetes cluster)
格式是 kaniko/{version} (出处:https://github.com/GoogleContainerTools/kaniko/blob/v1.9.1/pkg/executor/push.go#L63 )
我错了,这个是推镜像的时候才有这个UA,拉取镜像的时候UA是Go-http-client/1.1这样的,所以我们为什么要过滤UA?
已加
dockerproxy.com 主页是静态网页,匹配了UA反代给 registry.
有好建议?
如果短期内不能改变这个UA判断的模式,还求再放行一个 go-containerregistry 的 UA 。来源:https://github.com/google/go-containerregistry/blob/v0.8.0/pkg/v1/remote/transport/useragent.go#L43
kaniko太奇怪了,拉取镜像的时候,先通过 Go-http-client/1.1 访问了一下 /v2/ 然后又通过 go-containerregistry/v0.8.1-0.20220507185902-82405e5dfa82 访问具体的 API 。。。
主页是静态网页,然后能不能通过 path prefix 来决定反代给 registry 呢?所有API好像都在 /v2/ 路径下。
或者反过来,把 Mozilla 关键字作为浏览器的判断(所有浏览器都包含这个UA),其余的UA都代理给 registry
已经配置 正则取反 Mozilla 反代给 registry了. 你在试试
可以了!感谢!
博主你好, 首先十分感谢你的工作! 在使用过过程中, 发现 docker 是可以正常拉取的, 但是 podman pull 却无法拉取. 能看一下原因吗?
没有 podman 环境测试,没用过.提示什么错误吗?
/v2/ 这个 endpoint 在浏览器访问返回 401, 这个应该是正常的. 但是使用 curl 和 podman, 都会返回 报错页面, 'We're sorry but dockerproxy.com doesn't work properly without JavaScript enabled. Please enable it to continue.'. 是不是服务器做了 UA 检测?
通过 fake UA, 确实可以得到正确的结果
curl -A 'docker/1.13' -v 'https://dockerproxy.com/v2/stilleshan/frpc/manifests/latest'
@Stille podman 的 UA 是 'libpod/' , 希望博主可以支持一下
嗯,对,刚检查了下确实加了 UA, 我添加下 podman, 过一会再尝试一下.
谢谢, skopeo 是 podman 体系的另外一个重要命令专门用来同步镜像, 默认的 UA 是 'skopeo/*', 希望可以一并支持.
谢谢,我对这一块研究不深. 我一并先加上去.
podman 和 skopeo 都测试可用, 非常感谢!
1225a9ea610b:/# podman pull --log-level=debug dockerproxy.com/stilleshan/frpc:latest
INFO[0000] podman filtering at log level debug
DEBU[0000] Called pull.PersistentPreRunE(podman pull --log-level=debug dockerproxy.com/stilleshan/frpc:latest)
......
DEBU[0000] Using "default-docker" configuration
DEBU[0000] No signature storage configuration found for dockerproxy.com/stilleshan/frpc:latest, using built-in default file:///var/lib/containers/sigstore
DEBU[0000] Looking for TLS certificates and private keys in /etc/docker/certs.d/dockerproxy.com
DEBU[0000] GET https://dockerproxy.com/v2/
DEBU[0001] Ping https://dockerproxy.com/v2/ status 200
DEBU[0001] GET https://dockerproxy.com/v2/stilleshan/frpc/manifests/latest
DEBU[0001] Content-Type from manifest GET is "text/html"
DEBU[0001] Using blob info cache at /var/lib/containers/cache/blob-info-cache-v1.boltdb
DEBU[0001] IsRunningImageAllowed for image docker:dockerproxy.com/stilleshan/frpc:latest
DEBU[0001] Using default policy section
DEBU[0001] Requirement 0: allowed
DEBU[0001] Overall: allowed
DEBU[0001] Error pulling candidate dockerproxy.com/stilleshan/frpc:latest: initializing image from source docker://dockerproxy.com/stilleshan/frpc:latest: invalid character '<' looking for beginning of value
Error: initializing image from source docker://dockerproxy.com/stilleshan/frpc:latest: invalid character '<' looking for beginning of value
对比docker.io 的拉取结果: podman pull --log-level=debug docker.io/stilleshan/frpc:latest
DEBU[0000] GET https://registry-1.docker.io/v2/
DEBU[0001] Ping https://registry-1.docker.io/v2/ status 401
DEBU[0001] GET https://auth.docker.io/token?scope=repository%3Astilleshan%2Ffrpc%3Apull&service=registry.docker.io
DEBU[0002] GET https://registry-1.docker.io/v2/stilleshan/frpc/manifests/latest
DEBU[0004] Content-Type from manifest GET is "application/vnd.docker.distribution.manifest.list.v2+json"
DEBU[0004] Using blob info cache at /var/lib/containers/cache/blob-info-cache-v1.boltdb
DEBU[0004] Source is a manifest list; copying (only) instance sha256:50bc5f5605607172540fe38284eed05a4330c4ba3a00a11b888dfe2b751f9bf5 for current system
DEBU[0004] GET https://registry-1.docker.io/v2/stilleshan/frpc/manifests/sha256:50bc5f5605607172540fe38284eed05a4330c4ba3a00a11b888dfe2b751f9bf5
DEBU[0005] Content-Type from manifest GET is "application/vnd.docker.distribution.manifest.v2+json"
DEBU[0005] IsRunningImageAllowed for image docker:docker.io/stilleshan/frpc:latest
DEBU[0005] Using default policy section
DEBU[0005] Requirement 0: allowed
DEBU[0005] Overall: allowed
DEBU[0005] Downloading /v2/stilleshan/frpc/blobs/sha256:85ec3e64d8f45d8129b3302b7917b6e30dc8d9202a37641bb757513030af76bf
博主能发一个搭建你这个镜像的教程吗?