Docker Hub — алерт о приближении к pull-rate-limit
Анонимные image pull-ы упёрлись в Docker Hub limit (100/6h на IP) — CI начнёт падать с ToomanyRequests. Часто видно только когда уже за лимитом.
Рецепт
#!/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 ляжет.
Похожие рецепты
Контейнер падает по 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 никого не пингует.