본문 바로가기
인공지능 개발하기/Backend

[Docker-AWS 이슈] MacOS에서 AWS ECR에 이미지 push시 이미지 media-type이슈

by 선의공 2024. 10. 28.
반응형

 

문제.

> application/vnd.oci.image.index.v1+json

 
문제는 MacOS에서 발생했습니다.
(Docker 버전은 27.3.1.)
 

application/vnd.oci.image.index.v1+json

AWS ECR에 이미지를 올려 사용하려고 할때,

해당 OCI v1 media type 이미지를 사용할 수 없다고 하는 문제에 봉착했습니다.

 

ECR 이미지 스캔을 확인해면 아래와 같습니다. 

 
ECR Push시에 이미지 형태입니다.

 
OCI이미지 포맷이라 index와 레이어구조 파일이 분리된 형태인건지.

 

aws docs에서 확인해보면 

https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/image-manifest-formats.html

 

Amazon에서 컨테이너 이미지 매니페스트 형식 지원 ECR - Amazon ECR

이미지를 다이제스트로 가져오는 경우, 사용할 수 있는 변환이 없습니다. 클라이언트는 Amazon 에 저장된 이미지 매니페스트 형식을 이해해야 합니다ECR. 사용자가 Docker 1.9 이하 클라이언트에서

docs.aws.amazon.com

 

 

지원 image가 위와 같이 나오기는 하네요.

media type을 변경해주면 해결 될 문제인지 확인해보겠습니다.


 

해결

 

1. media type 변경

 

docker image를 linux/arm64 플랫폼 형태로 build 하고

1. docker build --platform linux/arm64 -t <이미지_이름>:<태그> .

 
 

skopeo를 설치해줍니다.

skopeo는 이미지 저장소 간에 직접 이미지 복사, 검사, 삭제, 태그 작업 등을 수행하는 라이브러리입니다.

skopeo를 이용해 이미지 내의 media-type format을 변경할 것입니다.

brew install skopeo

 

aws 로그인을 해주고 

aws ecr get-login-password --region <aws region> | skopeo login --username AWS --password-stdin <ecr저장소 url>

예시) aws ecr get-login-password --region ap-northeast-2 | skopeo login --username AWS --password-stdin 292261841111.dkr.ecr.ap-northeast-2.amazonaws.com

 

skopeo를 이용해서 이미지 format을 v2s2로 변경해서 ECR에 이미지를 push해줍니다.

skopeo copy --format v2s2 docker-daemon:<docker name>:<tag> docker://<aws ecr repogitory url>

예시 )skopeo copy --format v2s2 docker-daemon:synchro-you:latest docker://292261841111.dkr.ecr.ap-northeast-2.amazonaws.com/nipa-model:latest

 

확인을 해보면 Image만 올라온 것을 확인할 수 있습니다.

ECR의 repogitory 를 들어가 아티팩트 유형을 눌러서 확인해보면 media-type이 변경된 것을 확인할 수 있을거에요.

 

저는 해당 방식으로 media-type을 변경해서 문제가 잘 해결했습니다.

이 포스팅을 보시는 해당 이슈에 봉착하신 분들이 있으시다면

한번 해당 방식을 시도해보시기를 바랍니다.

반응형