← 돌아가기

# Docker Hub Pull 횟수 6시간에 100회 제한 정책

2021-01-02 도커

Docker Hub는 대용량의 컨테이너 이미지를 손쉽게 보관하고 사용할 수 있는 곳입니다. 작게는 수백Mb부터 크게는 1Gb가 넘는 이미지를 저장할 수 있고 공개된 이미지라면 누구나 무제한으로 다운받아 사용할 수 있습니다.

도커에선 "약 1%정도의 익명의 사용자가 Docker Hub 전체 다운로드의 30%를 사용" 한다고 말하면서 기존 무제한 다운로드 정책에서 제한된 정책을 발표했습니다.

# Docker Hub Rate Limit

Docker Hub 정책은 다음과 같습니다.

유저 제한
익명 유저(docker login 안함) IP 기반으로 6시간동안 100번 request 제한
로그인 유저(docker login 함) 계정 기반으로 6시간동안 200번 request 가능
지불 계정 유저(docker login 한 Paid 유저) 제한 없음

WARNING

지불 유저의 경우도 IP 기반 제한 (opens new window)이 있다고 합니다. 공개 저장소를 대량으로 사용하는 경우 주의가 필요합니다.

# 해결 방법

  1. 유료 계정

Pro($5) 또는 Team($7) 이상 계정으로 업그레이드 합니다.

EKS Distro

  1. proxy 구축

내부에 별도 저장소를 설정하여 mirror/cache 용도로 사용하는 방법입니다. 그래도 요청이 많다면 문제가 생길수 있습니다.

Harbor (opens new window)

  1. 오픈 소스 지원

오픈 소스 프로젝트의 경우 제한없이 사용할 수 있도록 지원합니다.

Open Source Community Application (opens new window)

# 제한 확인하기

Docker Hub API는 응답 헤더에 다음 값을 보냅니다.

헤더 이름 설명
RateLimit-Limit 6시간동안 가능한 전체 횟수
RateLimit-Remaining 6시간동안 가능한 남은 횟수
  1. 익명 유저

100번 가능, 96회 남음 확인. IP를 바꾸면 초기화 됩니다.

$ TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)

$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep RateLimit

< RateLimit-Limit: 100;w=21600
< RateLimit-Remaining: 96;w=21600
  1. 로그인 유저

200번 가능, 176회 남음 확인. IP를 변경해도 유저 기반으로 결정합니다.

$ TOKEN=$(curl --user 'username:password' "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)

$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep RateLimit

< RateLimit-Limit: 200;w=21600
< RateLimit-Remaining: 176;w=21600
  1. 에러 메시지

제한에 걸렸을 경우 응답입니다.

HTTP/1.1 429 Too Many Requests
Cache-Control: no-cache
Connection: close
Content-Type: application/json
{
  "errors": [{
      "code": "TOOMANYREQUESTS",
      "message": "You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit"
  }]
}

# 쿠버네티스에서 로그인 계정 사용 방법

쿠버네티스에서 로그인 계정으로 Docker Hub에 접근 하려면 추가 설정이 필요합니다.

  1. 인증정보를 추가
  2. Pod 설정에 어떤 인증을 사용할지 명시
  3. 매번 명시하기 귀찮은 경우 operator 이용

# Docker Hub 대안

무료로 사용할 수 있는 또 다른 대안은 별도 registry를 사용하는 방법입니다.

# 참고

← 돌아가기