Harbor에 이미지를 push 할 때 Unauthorized 에러가 발생하는 원인과 해결 방법에 대해 알아봅니다.

 

 

 

1. 현상

 

Harbor에 이미지를 push 하면 preparing과 waiting메시지가 보이다가 unauthorized에러가 발생하며 push가 취소됩니다.

 

 

 

 

2. 로그인 문제

 

해당 에러가 발생하면 가장 먼저 체크해봐야 할게 Private registry로의 로그인입니다. 다음 명령어로 다시 로그인을 시도해 봅시다.

 

> docker logout
> docker login your.host.com:port -u username -p password

 

그리고 다시 push를 해봅니다. 사실 이 방법으로 해결되면 이 글을 읽고 있지 않을 겁니다. 다른 원인에 대해 생각해 봅시다.

 

 

 

3. Nginx 문제

 

제 경우에 해당하는 원인이었습니다. 전 Harbor를 Private registy로 사용하고 있으며 해당 서버에 Nginx를 이용해 proxy_pass를 설정해 둔 상태입니다. 

 

또한 push명령을 직접 치기 귀찮아서 Harbor의 Repository에서 알려주는 Push Command를 복사해서 사용했습니다. 문제는 여기서 발생했습니다.

 

예를 들어 Harbor의 HTTPS 기본 포트를 변경해 사용하고 있다고 가정합시다. 443에서 1443으로 변경한 뒤 prepare를 통해 harbor.yml을 생성하게 되면 docker-compose.yml은 자동적으로 포트를 1443:8443으로 설정하게 됩니다. 또한 이런 식으로 설치된 Harbor는 Push command에 default port가 변경되었으므로 자동으로 1443 포트를 추가하게 됩니다. 

 

docker push your.host.com:1443/repo-name/image:tag

 

위와 같이 된다는 뜻입니다. 하지만 우리는 nginx를 통해 HTTPS연결을 잡아둔 상태이므로 1443 포트가 포함된 명령어를 그대로 사용할 수 없습니다. 

 

docker push your.host.com/repo-name/image:tag

 

위처럼 포트를 지우고 명령을 내리면 push작업이 진행되는 걸 확인할 수 있습니다.

 

 

 

 

만약 위와 같이 수정 후에 push명령중 413에러가 발생한다면 다음 글을 참고해 주시기 바랍니다:

2020/12/04 - [Programming/Linux] - [Nginx] 413 Request Entity Too Large

 

[Nginx] 413 Request Entity Too Large

413 Request Entity Too Large 에러 발생 시 해결 방법에 대해 알아봅니다. 1. 원인 Nginx에 설정해둔 요청 사이즈 제한을 초과한 요청이 들어온 경우 발생하는 에러입니다. 설정 파일에 "client_max_body_size"..

smoh.tistory.com

 

 

 

반응형

+ Recent posts