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 없이 요청 익명 User | IP 기반으로 확인, 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)를 고려해보는 것도 권장드립니다.
