spring boot 로 새로운 서버 하나를 ECS on EC2 로 배포하고 있는데, jib 로 build 한 image 로 애플리케이션이 정상적으로 뜨지 않아 디버깅하던 중 docker logs <CONTAINER_ID> 명령어의 결과가 `docker logs exec user process caused exec format error` 로 나왔다.
저 메시지는 주로 스크립트에 shebang 을 설정하지 않아서 어떤 환경으로 스크립트를 실행해야할 지 모를 때 발생하는 것으로 알고 있었는데, jib 에서 이런 문제를 만들었을 거라는 생각은 들지 않아 좀 더 찾아보았다.
결국은 jib 가 기본적으로는 amd architecture 에서 실행이 가능한 image 로 빌드를 하도록 돼있었고, 나는 build.gradle 에서 별도로 jib.from.platforms.architecture 설정을 해주지 않았었으며 해당 이미지를 사용하는 runtime 환경의 architecture 는 ARM 이었기 때문에 발생한 문제였다.
아래와 같이 platform.architecture 를 arm64 로 지정해주고 다시 빌드하도록 하니 문제가 없어졌다.
jib {
from {
image = "489478819445.dkr.ecr.us-west-2.amazonaws.com/amazoncorretto:17"
platforms {
platform {
architecture = "arm64"
os = "linux"
}
}
}
to {
// ...
}
}
반응형