본문 바로가기

Cloud

CrashLoopBackOff error 1 - exec user process caused “exec format error”

도커 이미지를 GKE에 배포하였으나 pod가 CrashLoopBackOff 상태로 실행되지 않았다.

kubectl logs pod/<pod-name>

명령어로 CrashLoopBackOff 오류가 발생한 pod의 log를 확인해보니

exec user process caused “exec format error”

와 같은 오류 메시지를 발견할 수 있었다.

 

원인을 찾아보니 이는 M1 mac 을 사용하는 사람들에게 발생하는 오류임을 알 수 있었다.

  • m1 mac을 사용하는 경우 docker build image의 기본 설정은 arm64이다
  • 허나 kubernetes의 클러스터는 amd 기반이기 때문에 오류가 발생하는 것이다

docker buildx

  • Multi-Architecture 빌드를 지원하는 docker CLI 플러그인
    • 도커 데스크탑을 이용하고 있다면 따로 설치할 필요 없이 바로 사용이 가능하다
docker buildx ls

명령어로 현재 도커 드라이버를 확인해보자.

image


위와 같이 기본적으로 arm64 플랫폼만 지원하고 있음을 확인할 수 있다.

새로운 도커 빌더 생성

docker buildx create --name mybuilder --driver docker-container --bootstrap --use
  • --driver : 기본 docker 빌더는 멀티 플랫폼 기능이 지원되지 않으므로 docker-container 드라이버 사용
  • --bootstrap : 생성한 빌더가 올바르게 부팅되었는지 확인
  • --use : 생성한 빌더를 사용하도록 설정

도커 이미지 빌드

docker buildx build --platform linux/amd64,linux/arm64 -t myrepo/myimage:v1 --push .

이렇게 컨테이너 레지스트리에 멀티 플랫폼 이미지를 올려두면, docker pull 명령어를 수행할 때 호스트에 아키텍처를 자동으로 감지하여 해당하는 이미지를 가져올 수 있다. 즉, M1/M2 mac에서 docker pull을 하면 ARM64 컨테이너 이미지를 가져오고, Intel VM에서 docker pull을 하면 x86_64 컨테이너 이미지를 가져온다.

'Cloud' 카테고리의 다른 글

[K8S] timezone 설정  (0) 2024.01.23
Cloud Platform 클라우드 플랫폼 알아보기  (0) 2023.09.08
[Kubernetes] 쿠버네티스 알아보기  (0) 2023.09.08