Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

DS's TechBlog

[Jenkins] Jenkins Docker-Hub Push 권한 문제 트러블 슈팅 본문

Tools

[Jenkins] Jenkins Docker-Hub Push 권한 문제 트러블 슈팅

dsjo 2025. 3. 22. 20:32

 최근 Jenkins 파이프라인을 활용하여 Docker 이미지를 빌드하고 Docker Hub에 푸시하는 과정에서 "requested access to the resource is denied" 에러가 발생했습니다. 이를 해결하는 과정에서 네임스페이스 설정 누락이 문제였음을 확인하였습니다. 이번 글에서는 해당 문제 상황과 해결 과정을 공유하고자 합니다.

 

문제 상황

Jenkins 파이프라인 내에서 Docker 이미지를 빌드한 후, 아래와 같은 명령어를 통해 Docker Hub에 이미지를 push하였습니다.

docker.withRegistry('', 'docker-hub') {
    docker.image(env.APP_IMAGE).push()
    docker.image(env.APP_IMAGE).push('latest')
}

 여기서 env.APP_IMAGE는 uptention-spring-image:41와 같이 지정되어 있었습니다. 그리고, push가 파이프라인에서 실행 되었을 때, 다음과 같은 에러 메시지가 출력되었습니다.

docker push uptention-spring-image:41
The push refers to repository [docker.io/library/uptention-spring-image]
28a996e96827: Preparing
353226c09343: Preparing
6be690267e47: Preparing
13a34b6fff78: Preparing
9c1b6dd6c1e6: Preparing
denied: requested access to the resource is denied

 

해결 방법

 Stack Overflow의 해당 글을 참조한 결과, 이미지 태그에는 반드시 사용자 네임스페이스를 포함해야 한다는 점을 확인할 수 있었습니다. Docker Hub는 네임스페이스가 포함되지 않은 태그를 기본적으로 library 네임스페이스로 인식한다고 합니다. 그래서, Jenkins 파이프라인의 환경 변수를 아래와 같이 수정하여, 이미지 태그에 내 사용자 네임스페이스(yourdockerhubname/)가 포함되도록 했습니다. 

env.APP_IMAGE = yourdockerhubname/uptention-spring-image:41

 

이렇게 하면, 빌드된 이미지 태그는 yourdockerhubname/uptention-spring-image:41처럼 되어 Docker Hub에서 올바른 리포지토리로 인식되어 푸시가 성공합니다.

 

결론

 Docker Hub에 이미지를 푸시할 때 네임스페이스를 포함하지 않으면, Docker Hub는 이를 기본 library 네임스페이스로 간주해 권한 에러가 발생합니다. Stack Overflow의 글을 참고하여, 이미지 태그에 반드시 사용자 네임스페이스를 포함해야 한다는 것을 알게 되었고, 이를 Jenkins 파이프라인 환경 변수에 반영함으로써 문제를 해결할 수 있었습니다. 읽어주셔서 감사합니다.