본문 바로가기

개발노트/LINUX

jib 로 java application docker build 후 발생하는 docker logs exec user process caused exec format error 라는 에러

 

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 {
     // ...
    }
}
반응형