- OCI 컨테이너 이미지를 GitLab 컨테이너 레지스트리로 마이그레이션
- Docker 연결 오류
- 매니페스트 리스트를 푸시할 때
Blob unknown to registry
오류 - 프로젝트 경로를 변경하거나 프로젝트를 이전할 수 없음
- 큰 이미지를 푸시할 때
unauthorized: authentication required
메시지 Failed to pull image
메시지- 큰 이미지를
kaniko
를 사용하여 푸시할 때 업로드가 느린 문제 docker login
명령이access forbidden
오류로 실패함
GitLab 컨테이너 레지스트리 문제 해결
대부분의 GitLab 컨테이너 레지스트리 문제를 해결하려면 GitLab에 관리자 권한으로 로그인해야 합니다.
GitLab 컨테이너 레지스트리 관리 문서에서 추가 문제 해결 정보를 찾을 수 있습니다.
OCI 컨테이너 이미지를 GitLab 컨테이너 레지스트리로 마이그레이션
GitLab 레지스트리로의 컨테이너 이미지 마이그레이션은 지원되지 않지만, epic에서 이 동작을 변경하기로 제안되었습니다.
컨테이너 이미지를 마이그레이션하기 위해 다른 회사의 도구를 사용할 수 있습니다. 예를 들어 skopeo는 여러 저장 메커니즘 간에 컨테이너 이미지를 복사할 수 있습니다. skopeo를 사용하여 컨테이너 레지스트리, 컨테이너 스토리지 백엔드, 로컬 디렉터리 및 로컬 OCI 레이아웃 디렉터리에서 GitLab 컨테이너 레지스트리로 복사할 수 있습니다.
Docker 연결 오류
Docker 연결 오류는 그룹, 프로젝트 또는 브랜치 이름에 특수 문자가 포함되어 있을 때 발생할 수 있습니다. 특수 문자로는 다음이 포함됩니다:
- 선행 밑줄.
- 뒷부분 하이픈 또는 대시.
이 오류를 해결하려면 그룹 경로, 프로젝트 경로 또는 브랜치 이름을 변경해야 합니다.
Docker Engine 17.11 이전을 사용하는 경우 404 Not Found
또는 Unknown Manifest
오류 메시지가 표시될 수 있습니다. 현재 버전의 Docker Engine에서는 v2 API를 사용합니다.
GitLab 컨테이너 레지스트리의 이미지는 Docker v2 API를 사용해야 합니다. 버전 1 이미지를 버전 2로 업데이트하는 방법에 대한 자세한 내용은 Docker 문서를 참조하십시오.
매니페스트 리스트를 푸시할 때 Blob unknown to registry
오류
GitLab 컨테이너 레지스트리에 Docker 매니페스트 리스트를 푸시할 때 manifest blob unknown: blob unknown to registry
오류 메시지가 표시될 수 있습니다. 이 오류는 동일한 리포지터리가 아닌 여러 리포지터리에 분산된 다른 아키텍처의 이미지가 있는 경우 발생합니다.
예를 들어 두 개의 이미지가 있는 경우 각각 다음과 같이 아키텍처를 표현합니다:
-
amd64
플랫폼. -
arm64v8
플랫폼.
이러한 이미지로 다중 아키텍처 이미지를 빌드하려면 이들을 동일한 리포지터리에 푸시해야 합니다.
Blob unknown to registry
오류를 해결하려면 개별 이미지의 태그 이름에 아키텍처를 포함하십시오. 예를 들어 mygroup/myapp:1.0.0-amd64
및 mygroup/myapp:1.0.0-arm64v8
와 같이 사용할 수 있습니다. 그런 다음 매니페스트 리스트에 mygroup/myapp:1.0.0
으로 태그를 지정할 수 있습니다.
프로젝트 경로를 변경하거나 프로젝트를 이전할 수 없음
프로젝트 경로를 변경하거나 프로젝트를 새 네임스페이스로 이전하려고 시도하는 경우 다음과 같은 오류 메시지 중 하나가 발생할 수 있습니다:
- 프로젝트는 컨테이너 레지스트리에 태그가 있기 때문에 이전할 수 없습니다.
- 네임스페이스는 한 프로젝트에 태그가 있기 때문에 이동할 수 없습니다.
이 오류는 프로젝트에 컨테이너 레지스트리에 이미지가 있는 경우 발생합니다. 경로를 변경하거나 프로젝트를 이전하기 전에 이미지를 삭제하거나 이동해야 합니다.
다음 절차는 다음과 같은 샘플 프로젝트 이름을 사용합니다:
- 현재 프로젝트:
gitlab.example.com/org/build/sample_project/cr:v2.9.1
. - 새 프로젝트:
gitlab.example.com/new_org/build/new_sample_project/cr:v2.9.1
.
-
컴퓨터에서 Docker 이미지를 다운로드합니다:
docker login gitlab.example.com docker pull gitlab.example.com/org/build/sample_project/cr:v2.9.1
-
새 프로젝트 이름과 일치하도록 이미지의 이름 바꾸기:
docker tag gitlab.example.com/org/build/sample_project/cr:v2.9.1 gitlab.example.com/new_org/build/new_sample_project/cr:v2.9.1
- UI 또는 API를 사용하여 이전 프로젝트의 이미지 삭제. 이미지가 대기열에 들어가 삭제될 때까지 시간이 걸릴 수 있습니다.
-
경로 변경 또는 프로젝트 이전:
- 왼쪽 사이드바에서 검색 또는 이동하여를 선택하고 프로젝트를 찾습니다.
- 설정 > 일반을 선택합니다.
- 고급 섹션을 확장합니다.
- 경로 변경 텍스트 상자에서 경로를 편집합니다.
- 경로 변경을 선택합니다.
-
이미지 복원:
docker push gitlab.example.com/new_org/build/new_sample_project/cr:v2.9.1
세부 정보는 이 이슈를 참조하십시오.
큰 이미지를 푸시할 때 unauthorized: authentication required
메시지
큰 이미지를 푸시하는 경우, 컨테이너 레지스트리의 토큰이 이미지 푸시가 완료되기 전에 만료되어 인증 오류가 발생할 수 있습니다. 기본적으로 Self-managed GitLab 인스턴스의 컨테이너 레지스트리 토큰은 5분마다 만료됩니다. GitLab.com에서는 토큰 만료 시간이 15분으로 설정됩니다.
Self-managed GitLab을 사용하는 경우 관리자는 토큰 지속 시간을 증가시킬 수 있습니다.
Failed to pull image
메시지
제한된 CI/CD 작업 토큰 범위가 있는 프로젝트에서 컨테이너 이미지를 끌어오지 못하는 경우 Failed to pull image
오류 메시지를 받을 수 있습니다.
큰 이미지를 kaniko
를 사용하여 푸시할 때 업로드가 느린 문제
kaniko
를 사용하여 큰 이미지를 푸시할 때 치명적으로 긴 지연이 발생할 수 있습니다.
이는 일반적으로 HTTP/2 및 kaniko
의 성능 문제로 인한 것입니다.
현재의 임시 방편은 kaniko
로 푸시할 때 HTTP/1.1을 사용하는 것입니다.
HTTP/1.1을 사용하려면 GODEBUG
환경 변수를 "http2client=0"
으로 설정하십시오.
docker login
명령이 access forbidden
오류로 실패함
컨테이너 레지스트리는 GitLab API URL을 Docker 클라이언트에 반환하여 자격 증명을 검증합니다. Docker 클라이언트는 기본 인증을 사용하므로 요청에는 Authorization
헤더가 포함됩니다.
레지스트리 구성에 대해 /jwt/auth
엔드포인트로 구성된 요청에서 Authorization
헤더가 누락되면 access forbidden
오류 메시지가 표시됩니다.
예를 들어:
> docker login gitlab.example.com:4567
Username: user
Password:
Error response from daemon: Get "https://gitlab.company.com:4567/v2/": denied: access forbidden
이 오류를 피하려면 요청에서 Authorization
헤더가 제거되지 않도록 해야 합니다.
예를 들어, GitLab 앞에 있는 프록시가 /jwt/auth
엔드포인트로 리디렉션을 수행할 수 있습니다.