728x90
ECR 생성하기 (M1 Mac 적용) - exec /usr/bin/java: exec format error 에러 해결
저번 포스팅에서 ECR을 세팅하고 따로 ECS까지 생성해서 배포 테스트를 진행했는데 계속 같은 에러를 내면서 실패했다. 그 에러를 해결하는 험난한 과정을 작성해 보겠다,,,
1. 원인 코드
일단 ECS에서 배포를 하면 아래와 같은 에러 메시지가 출력되면서 배포에 실패한다.
exec /usr/bin/java: exec format error
계속 검색하고 알아본 결과, 원인은 운영 체제의 차이에서 오는 문제였다.
지금 로컬에 ECR에 빌드한 노트북이 M1 시리즈의 맥북이었는데 ECS에서 설정한 EC2의 아키텍처는 x86이다.
Mac M1에서 빌드한 Docker image는 ARM 아키텍처를 사용하므로, Ubuntu 서버에서 이것을 실행하기 위해서는 AMD64 아키텍처에 호환되는 이미지를 빌드해야 했던 것이었다.
2. 해결
- ECR repository에서 [푸시 명령 보기] 버튼을 클릭해서 나온 명령어를 조금 수정해서 사용해야 한다.
- 나는 한 번에 빌드하고 푸시하는 명령어를 사용했다.
- 먼저, 아래 명령어로 ECR에 로그인하는 것까지는 동일하다.
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin @!#!@#!@#!@#!@#heast-2.amazonaws.com
- 이제, 아래 명령어로 한 번에 빌드하고 푸시까지 한다.
docker buildx build --platform=linux/amd64,linux/arm64 -t !@@#$@#$@#$@$east-2.amazonaws.com/recipia-repository:latest . --push
- docker buildx build 명령어에 대한 자세한 설명은 아래 링크에 작성했다.
[Docker] 멀티-플랫폼 이미지 빌드 명령어 (여러 운영체제 호환 가능한 도커 이미지 빌드)
- 그럼 ECR에 이미지가 잘 들어와 있는 걸 확인할 수 있다.
3. 마무리
위처럼 에러를 해결하고 다시 ECS에서 이미지 url을 새로 복사해서 적용하고 배포를 진행하니까 정상 배포되었다.
(여기서 중요한 건 ECR에 새로운 이미지를 push 하면 기존 이미지의 URI가 변경되니까 다시 시도할 때 새로 push 한 이미지의 URI를 새로 복사해야 한다.)
찾아보니 M1에서 이런 이슈가 굉장히 잦았던 것 같다. 이런 이슈를 남들은 안 겪었으면 좋겠어서 포스팅해서 정리를 해보았다.
'AWS' 카테고리의 다른 글
[AWS] CodePipeline을 이용한 CI/CD (1) - 파이프 라인 생성 (0) | 2023.10.31 |
---|---|
[AWS] ECS 생성5 - ECS 생성 및 설정 (w ALB) (0) | 2023.10.31 |
[AWS] ECS 생성4 - ECS 생성 및 설정 (w/o ALB) (0) | 2023.10.30 |
[AWS] ECS 생성3 - ALB 세팅하기 (0) | 2023.10.30 |
[AWS] ECS 생성1 - ECR 생성하기 (M1 Mac 제외) (0) | 2023.10.30 |