Skip to content

Docker Hub — алерт о приближении к pull-rate-limit

Анонимные image pull-ы упёрлись в Docker Hub limit (100/6h на IP) — CI начнёт падать с ToomanyRequests. Часто видно только когда уже за лимитом.

Рецепт

bash
#!/usr/bin/env bash
# /etc/cron.d/dockerhub-quota
# */30 * * * * root /opt/dockerhub-quota.sh

# Get an anonymous token, then check pull headers
TOKEN=$(curl -fsS "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)

HEADERS=$(curl -fsS -I -H "Authorization: Bearer $TOKEN" \
  "https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest")

LIMIT=$(echo "$HEADERS"  | awk -F'[:;]' '/ratelimit-limit/    {gsub(/ /,"",$2); print $2}')
REMAIN=$(echo "$HEADERS" | awk -F'[:;]' '/ratelimit-remaining/{gsub(/ /,"",$2); print $2}')

PCT=$((REMAIN * 100 / (LIMIT > 0 ? LIMIT : 1)))

if [ "$PCT" -lt 20 ]; then
  curl -fsS "$HEARTBEAT_URL" --data "remaining=$REMAIN,limit=$LIMIT,pct=$PCT"
  exit 2
fi
echo "OK ($REMAIN/$LIMIT pulls left)"

То же самое в Enterno.io

Заверните в Enterno heartbeat — узнаете о приближении лимита заранее, успеете перейти на authenticated pull или mirror раньше, чем CI ляжет.

Настроить API monitor → ← Все рецепты

Похожие рецепты

Контейнер падает по OOM, restart-политика поднимает его обратно — наружу никаких сигналов, пока пользователи не пожаловались.

docker info висит >30 сек — daemon в split-brain состоянии. Контейнеры работают (kernel держит namespaces), но новых релизов deploy не сделать. systemctl status показывает active.

ECR pull начал стабильно фейлить (IRSA expired, network ACL, repo policy mismatch) — поды в kube не могут запуститься, ImagePullBackOff. Но событие kubelet никого не пингует.