镜像推送
如何通过API推送镜像到SWR?
SWR暂时没有开放镜像上传的API,您可以参考推送镜像到镜像仓库章节的两种方式:容器引擎客户端的方式或页面上传方式来完成镜像推送。
为什么通过客户端上传和页面上传的镜像大小不一样?
问题描述
假设在本地Docker客户端上制作了一个nginx镜像,版本号为v2.0.0,使用docker images命令查询SIZE为22.8MB:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v2.0.0 22f2bf2e2b4f 9 days ago 22.8MB
- 通过docker容器引擎客户端(即执行docker push命令)上传该镜像至SWR镜像仓库,查询大小为9.5MB。
- 在本地Docker客户端将镜像打包为tar格式,将nginx.tar下载至本地后,通过页面方式上传至SWR镜像仓库,查询大小为23.2MB。
可以发现,通过客户端和页面上传的镜像大小不一样。
原因分析
使用客户端上传的镜像每一层layer都进行了tgz压缩,而页面上传的镜像包是经过docker打包的,每一层layer只进行了打包,没有压缩。所以两种方式上传的镜像大小显示会不一致。
SWR镜像仓库支持ARM镜像上传么?
SWR镜像仓库对镜像的内核架构是没有任何限制的,您上传ARM架构的镜像和上传x86的镜像是没有区别的,直接上传即可。
docker push使用什么协议将镜像推送到SWR?
HTTPS协议。
同名同tag的镜像上传后会覆盖之前的镜像吗?
会覆盖,保留最新上传的镜像。
SWR单个layer的最大限制是多少?
使用客户端向SWR上传镜像,镜像的每个layer大小不能超过50G。
SWR公网上传单租户流控限制是多少?
为了确保SWR镜像上传租户间不会互相影响,当前对单个租户流控为镜像层上传20QPS,超过后会被限流,docker会收到503并会自动重试限流拦截的请求。
SWR支持断点续传镜像文件吗?
暂不支持。
通过公网上传镜像到SWR时,公网链路不稳定导致上传镜像慢或卡住,如何优化?
可通过调整OS参数,优化上传速度。
适用场景:Linux内核版本4.9及以上(如Euler OS 2.9、HCE 2.0、Ubuntu 18、Rocky Linux 8+等)。
操作步骤:
- 登录到上传镜像的目标主机,切换至root用户。
- 执行以下命令优化网络传输性能:
# 设置网络核心的默认队列调度算法(Queueing Discipline, qdisc)为 fq(Fair Queueing,公平队列) sysctl -w net.core.default_qdisc=fq # 配置 Linux 内核 TCP 拥塞控制算法的参数 sysctl -w net.ipv4.tcp_congestion_control=bbr # 配置 Linux 内核 TCP 发送缓冲区大小的参数 sysctl -w net.ipv4.tcp_wmem="4096 163840 41943040"
怎么处理页面上传多个镜像时报错“ERR_BLOB_OUT_OF_MEMORY”?
问题现象:
用户通过SWR控制台页面上传镜像时,单击“开始上传”按钮批量上传多个镜像包,浏览器报错“(failed)net::ERR_BLOB_OUT_OF_MEMORY”,导致上传失败。

解决方案:
- 清理浏览器缓存:
- 关闭当前浏览器页签。
- 清除浏览器缓存(Cookie、站点数据等)。
- 重新打开浏览器并登录SWR控制台。
- 重新进行上传操作。
- 大镜像推荐使用客户端上传。具体操作请参见:容器引擎客户端推送镜像。