无Docker环境进行容器镜像操作
找了有两个开源项目比较不错,都可以完成镜像的迁移。
crpy 的使用
crpy 使用 python 开发,有本地缓存,拉取和推送镜像速度比较快。使用体验比较接近 docker。
开源地址: https://github.com/bvanelli/crpy
安装
1 | # 也可以安装到虚拟环境 |
认证
1 | crpy login registry.cn-hangzhou.aliyuncs.com -u <username> -p <password> |
认证信息存储在:~/.crpy/config.json
拉取镜像
1 | crpy pull nginx:1.29 nginx_1.29.tar |
缓存数据存储在:~/.crpy/blobs
推送镜像
1 | crpy push nginx_1.29.tar registry.cn-hangzhou.aliyuncs.com/iuxt/nginx:1.29 |
crane 的使用
这个工具是 Golang 写的,支持 Windows,单文件直接运行,比较方便,支持指定架构。
https://github.com/google/go-containerregistry/blob/main/cmd/crane/README.md
安装
在:https://github.com/google/go-containerregistry/releases 下载二进制文件即可。
认证
1 | crane auth login registry.cn-hangzhou.aliyuncs.com -u <username> -p <password> |
认证信息存储在:~/.docker/config.json
拉取镜像
1 | # --platform linux/arm64 可以指定拉取特定架构的镜像 |
推送镜像
1 | crane push ./nginx_1.27.tar registry.cn-hangzhou.aliyuncs.com/iuxt/nginx:1.27 |
同步镜像
同步镜像会根据两个仓库的镜像摘要来确定是否同步对应的层,如果指定的层目标已存在是不会进行同步的,同步会更高效。
1 | crane copy --platform linux/amd64 nginx:1.27 registry.cn-hangzhou.aliyuncs.com/iuxt/nginx:1.27 |
查看仓库里有哪些 tag
1 | crane ls registry.cn-hangzhou.aliyuncs.com/iuxt/nginx |
SSRF 报错的处理
1 | Copying from registry.example.com/pro/rocketmq:server-4.5.1 to swr.dxh2-region-1.example.com.cn/prod/rocketmq:server-4.5.1 |
这个报错是 crane(底层使用 go-containerregistry)的 SSRF 安全防护机制触发的。源仓库 registry.example.com 在返回镜像 blob 数据时,通过 HTTP 重定向把请求指向了内网地址 10.83.4.204:8060,而 crane 的安全策略默认拒绝从公网域名重定向到私有/链路本地地址,以防止服务端请求伪造攻击。
可以使用旧版本 0.21.1 ,这个版本没有这个限制。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!





