2025년 4월 1일부터 Docker는 Docker Hub에 새로운 pull rate limit을 적용할 예정이며, 이는 GitLab에서 실행되는 파이프라인을 포함해 업계 전반의 CI/CD 파이프라인에 중대한 영향을 미칠 수 있습니다. 가장 큰 변화는 인증되지 않은 사용자에게 6시간당 100회 pull limit이 적용된다는 점입니다.
무엇이 변경되나요?
4월 1일부터 Docker는 다음과 같은 pull rate limit을 적용합니다.

이 내용이 특히 중요한 이유는 다음과 같습니다.
- GitLab의 의존성 프록시(Dependency Proxy)는 현재 Docker Hub에서 인증되지 않은 사용자로 pull을 수행합니다.
- 의존성 프록시를 사용하지 않는 대부분의 CI/CD 파이프라인은 Docker Hub에서 인증되지 않은 사용자로 직접 pull을 수행합니다.
- GitLab.com의 호스팅 러너(hosted runner)에서는 여러 사용자가 동일한 IP 주소 또는 서브넷을 공유할 수 있으므로, 해당 제한이 공동으로 적용될 수 있습니다.
GitLab 사용자에게 미치는 영향
Docker Hub에서 직접 Pull 할 때 영향
CI/CD 파이프라 인이 Docker Hub에서 인증 없이 이미지를 직접 pull 할 때, 이는 IP 주소당 6시간에 100회로 제한됩니다. 파이프라인을 자주 실행하거나 동일한 러너 인프라를 공유하는 여러 프로젝트에서 파이프라인을 실행할 때, 이 제한은 빠르게 소진돼 파이프라인 실패로 이어질 수 있습니다.
GitLab 의존성 프록시(Dependency Proxy)에 미치는 영향
GitLab의 의존성 프록시(Dependency Proxy) 기능은 Docker 이미지를 GitLab 내에 캐시해 파이프라인 속도를 높이고 외부 의존성을 줄일 수 있습니다. 그러나 현재 구현은 Docker Hub에서 인증되지 않은 사용자로 pull을 수행하므로, 6시간당 100회 제한이 적용됩니다.
호스팅 러너에 미치는 영향
GitLab.com의 호스팅 러너(hosted runner)에서는 Google Cloud의 pull-through 캐시를 사용합니다. 이는 자주 pull 하는 이미지를 미러링해 rate limit을 피하도록 돕습니다. .gitlab-ci.yml 파일의 image: 또는 services:에 정의된 Job 이미지는 rate limit의 영향을 받지 않습니다.
그러나 러너 환경 내에서 이미지를 pull 할 때마다 상황은 조금 더 복잡해집니다. 러너 런타임 동안 이미지를 pull 하는 가장 일반적인 사용 사례는 Docker-in-Docker 또는 Kaniko를 사용해 이미지를 빌드할 때입니다. 이때 Dockerfile에 정의된 Docker Hub 이미지가 Docker Hub에서 직접 pull 되므로, rate limit의 영향을 받을 수 있습니다.
GitLab의 대응 방안
GitLab은 이러한 문제를 완화하기 위해 여러 솔루션을 적극적으로 마련하고 있습니다.
- 의존성 프록시 인증: GitLab의 의존성 프록시(Dependency Proxy) 기능에 Docker Hub 인증 지원을 추가했습니다. 이는 의존성 프록시가 인증된 사용자로 Docker Hub에서 이미지를 pull 하도록 해 rate limit을 크게 완화합니다.
- 문서 업데이트: Docker Hub의 파이프라인 인증 구성에 명확한 지침을 제공하기 위해 문서를 업데이트했습니다.
- 내부 인프라 준비: GitLab.com의 호스팅 러너(hosted runner)에 미치는 영향을 최소화하기 위해 내부 인프라를 준비하고 있습니다.
사용자가 준비할 조치
옵션 1: 파이프라인에 Docker Hub 인증 구성하기
Docker Hub에서 직접 pull 하는 파이프라인에서는 인증을 구성하면 rate limit을 6시간당 200회로 늘릴 수 있습니다(또는 Docker Hub 유료 구독 시 무제한).
Docker Hub 자격 증명을 프로젝트 또는 그룹 CI/CD 변수에 추가하세요(.gitlab-ci.yml 파일이 아닌). DOCKER_AUTH_CONFIG CI/CD 변수를 올바르게 설정하는 방법은 GitLab의 Docker 이미지 사용 가이드를 참조하세요.
옵션 2: GitLab 컨테이너 레지스트리(Container Registry) 사용하기
자주 사용하는 Docker 이미지를 GitLab 컨테이너 레지스트리(Container Registry)