skip to Main Content

Docker Hub 속도 및 요청 제한

컨테이너 환경을 테스트하거나 운영하는 환경에서는 Docker hub에서 수시로 요청하고 저장하는 일이 많습니다. 적은 사용량을 유지하고 있다면 문제 없이 사용할 수 있지만 2020년 11월 20일에 Docker Hub 정책에 변경이 있었습니다.

변경된 내용은 Docker Hub의 익명 및 무료 인증 사용에 대한 비율 제한입니다. 익명 및 무료 Docker Hub 사용자는 6 시간당 100 개 및 200 개의 컨테이너 이미지 풀 요청으로 제한됩니다. 

초과하는 경우 다음과 같은 메세지가 나오면서 제한됩니다.

💻 message

ERROR: toomanyrequests: Too Many Requests.

You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits

DockerHub 제한 정책

세부적인 제한 내용은 다음과 같습니다.

기준제한 내용
docker login 없이 요청 익명 UserIP 기반으로 확인, 6시간동안 100회 요청
free user계정 기반으로 확인, 6시간동안 200회 요청
Pro, Team user제한 없음

💻 익명 유저 테스트 방법

6 시간마다 100번 pull로 설정되어 있음을 보여줍니다 . 

# token 발급
$ TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
# image 요청
$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1
HTTP/1.1 200 OK
content-length: 2782
content-type: application/vnd.docker.distribution.manifest.v1+prettyjws
docker-content-digest: sha256:767a3815c34823b355bed31760d5fa3daca0aec2ce15b217c9cd83229e0e2020
docker-distribution-api-version: registry/2.0
etag: "sha256:767a3815c34823b355bed31760d5fa3daca0aec2ce15b217c9cd83229e0e2020"
date: Sun, 13 Jun 2021 10:33:36 GMT
strict-transport-security: max-age=31536000
ratelimit-limit: 100;w=21600
ratelimit-remaining: 100;w=21600

💻 Dockerhub 유저 테스트 방법

6 시간마다 200번 pull로 설정되어 있음을 보여줍니다 . 

# token 발급
$ TOKEN=$(curl --user 'username:password' "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
# 인증된 계정으로 image 요청
$ 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

🚀 해결 방안

유료 전환

Pull 속도 제한 및 요청 횟수를 늘리려면 계정을 Docker Pro 또는 Team 구독으로 업그레이드합니다.

Docker Pro 및 Docker Team 계정은 Docker Hub에서 24 시간 동안 50,000 개의 가져 오기를 활성화 합니다.  

오픈소스 커뮤니티 애플리케이션 신청

오픈소스 커뮤니티 애플리케이션을 신청하면 제한없이 사용할 수 있지만 기업에서 사용하기는 힘듭니다.

Proxy 서버

Private docker registry, Nexus, Harbor 와 같은 이미지 저장소 구성하고 Mirror 용도로 사용하는 방법입니다. 컨테이너 런타임을 docker로 사용하는 경우, registry-mirrors 를 containerd 를 사용한다면 plugins.”io.containerd.grpc.v1.cri”.registry.mirrors, endpoint 를 추가하고 데몬을 재시작해서 적용합니다.

하지만 여전히 유료 계정이 아니라면 요청횟수가 제한될 수 밖에 없기 때문에 근본적인 해결책은 아닙니다.

Docker

$ /etc/docker/daemon.json
{
   "registry-mirrors": ["https://proxy.accordions.co.kr"]
}

Containerd

$ /etc/containerd/config.toml

    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."10.20.200.100:5000"]
          endpoint = ["https://10.20.200.100:5000"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."proxy.accordions.co.kr"]
          endpoint = ["https://proxy.accordions.co.kr"]

Docker Hub가 무료 사용량을 축소하였지만 여전히 사용하기 좋은 이미지 저장소입니다. 하지만 다른 대안 이미지 저장소(GitHub Container Regsitry, Amazon ECR Public)를 고려해보는 것도 권장드립니다.

🔗 Related Links

Back To Top