dockerhub免费套餐用户六小时只能拉取镜像200次了

事情时这样的:

上周在公司对负责系统进行负载测试,第一轮测得很happy,响应速度与自动扩展能力都符合预期。奇怪的事在第二轮时出现了。。。线上系统新增容器不断重启。。。整个系统能力被卡脖子了。。。

这绝对是见了鬼了,系统基于AWS ECS服务(AWS提供的基于docker的容器集群,不要和阿里云的主机服务混淆),频繁的Task启动失败绝对是有大问题了。我第一时间查看了AWS console 上关于启动失败的任务推出码:

error

ECS任务定义下有一个是主程序,还挂了几个Side-Car模式的容器做指标转发和程序追踪。出了主程序是自己构建的,其他都是从dockerhub直接取的,而这些镜像都拉取失败了,致使整个ECS任务不能正常启动。这是怎么回事? 居然拉取镜像都不成功了。

Docker is both a company and an Open Source project which revolutionised how users deploy code to production. Containers rather than Virtual Machines (VMs) are now considered the lingua franca of deployments, and containers are packed in “images”. These images need to be distributed through a container registry, such as the registry created and operated by Docker called the Docker Hub.

根据docker给的提示信息再结合谷歌大法:

google_docker_limit

基本锁定了dockerhub变坏了,对用户要差别对待了。深挖一下有了结果,注册的免费用户六小时只有200次的拉取机会。匿名用户只有100次。。。

docker_blog_limit

根据DockerHub给的文档检验下剩余的使用额度:(https://www.docker.com/blog/checking-your-current-docker-pull-rate-limits-and-status/)

dockerhub_check_limit

实锤了!做负载测试时把账号的使用限额给超了。DockerHub对这个账号进行了限流。

DockerHub新政策的影响

在开源软件社区,匿名拉取镜像是非常常见的,尤其在CI/CD系统中,几乎所有人都会用到Docker Hub中的镜像或者以公有镜像作为基准继续构建自己的镜像。基于容器的服务也基本都会遇到这个问题,比如AWS ECS, EKS 或者Kubernetes。当进行扩展时,如果对dockerhub的请求已经超过限制,就会持续失败状态,造成服务停机。CI/CD流水线上会造成打包发布失败等问题。

解决方法

  1. 直接交钱,升级到付费版本,重新获得无限使用权

  2. 找新的docker仓库或着dockerhub的镜像站点使用

对于AWS用户,可以使用Amazon ECR Public Gallery -- Share and deploy container images, publicly and privately.
在AWS环境内使用这个公共仓库可以获得无限的使用频率。

public_ecr

我的解决方法也是ECR Public Gallery,将images全部换掉,重新部署服务,一切恢复正常了。


参考链接: