본문 바로가기
프로그래밍

에러 메시지 exec format error는 linux/amd64 이미지를 라즈베리파이의 linux/arm64/v8 환경에서 실행할 수 없어서 발생한 문제입니다.

by AandBB 2025. 3. 12.

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)

linux/amd64 이미지를 linux/arm64/v8(라즈베리파이)에서 실행하려다 실패했을 가능성 높음.

아키텍처 불일치: 로컬에서 빌드한 amd64 이미지가 ARM에서 실행되지 않음 → exec format error 발생 가능.

해결 방법

ARM 아키텍처(linux/arm64)용 이미지를 만들어야 합니다. 두 가지 방법으로 진행할 수 있어요:

1. 로컬에서 ARM 이미지 빌드 (추천)

docker buildx를 사용해 로컬에서 ARM용 이미지를 빌드하고 라즈베리파이에 전송:

  1. Buildx 확인 및 설정:
    • 로컬에서 buildx 사용 가능 여부 확인:
      docker buildx version
      • 없으면 설치 (Windows라면 WSL2 필요):
        docker buildx create --use
  2. ARM 이미지 빌드:
    cd C:\Users\Ujin Kim\Downloads\rating-engine docker buildx build --platform linux/arm64 -t rating-engine:arm-v1 .
    cd C:\Users\Ujin Kim\Downloads\radar-live-mockup docker buildx build --platform linux/arm64 -t radar-live-mockup:arm-v1 .
  3. 이미지 저장:
    docker save -o rating-engine-arm-v1.tar rating-engine:arm-v1
    docker save -o radar-live-mockup-arm-v1.tar radar-live-mockup:arm-v1
  4. 라즈베리파이에 전송:
    scp rating-engine-arm-v1.tar coder1@thekitchen.work:/home/coder1/
    scp radar-live-mockup-arm-v1.tar coder1@thekitchen.work:/home/coder1/
  5. 기존 컨테이너 제거:
    docker rm rating-engine-container
    docker rm radar-live-mockup-container
  6. 로드 및 실행:
    docker load -i /home/coder1/rating-engine-arm-v1.tar
    docker load -i /home/coder1/radar-live-mockup-arm-v1.tar
    docker run -d -p 4000:4000 --name rating-engine-container rating-engine:arm-v1
    docker run -d -p 4001:4001 --name radar-live-mockup-container radar-live-mockup:arm-v1
     

(원래는 아래와 같이 실행해 에러남)

빌드 명령어

bash
CollapseWrapCopy
cd C:\Users\Ujin Kim\Downloads\rating-engine docker build -t rating-engine:v1 .

빌드 명령어

bash
CollapseWrapCopy
cd C:\Users\Ujin Kim\Downloads\radar-live-mockup docker build -t radar-live-mockup:v1 .

1. 로컬에서 이미지 준비

이미 빌드한 이미지를 확인합니다:

docker images
  • rating-engine:v1와 radar-live-mockup:v1이 보이는지 확인.

이미지를 .tar 파일로 저장:

docker save -o rating-engine-v1.tar rating-engine:v1
docker save -o radar-live-mockup-v1.tar radar-live-mockup:v1
  • 결과: rating-engine-v1.tar와 radar-live-mockup-v1.tar 파일 생성.

2. 라즈베리파이에 전송

SSH를 통해 파일을 라즈베리파이로 전송:

scp rating-engine-v1.tar coder1@thekitchen.work:/home/coder1/
scp radar-live-mockup-v1.tar coder1@thekitchen.work:/home/coder1/

3. 라즈베리파이에서 이미지 로드

전송한 .tar 파일을 Docker로 로드:

docker load -i rating-engine-v1.tar
docker load -i radar-live-mockup-v1.tar
  • 확인:
    docker images

5. 컨테이너 실행

기존 실행 중인 프로세스 중지 (필요 시):

ps aux | grep node sudo kill -9 <PID>

Docker 컨테이너 실행:

docker run -d -p 4000:4000 --name rating-engine-container rating-engine:v1
docker run -d -p 4001:4001 --name radar-live-mockup-container radar-live-mockup:v1

6. 확인

docker ps
  • 두 컨테이너가 실행 중인지 확인.
  • 브라우저에서 thekitchen.work:4000과 thekitchen.work:4001로 접속 테스트.
 
Dockerfile과 Git의 차이:
  • Git은 소스코드와 Dockerfile을 관리합니다. 하지만 Docker 이미지는 Git에 포함되지 않아요. 이미지는 빌드된 결과물로, Docker Hub나 수동 전송으로 배포해야 합니다.
  • 라즈베리파이에서 git pull만 하면 소스코드와 Dockerfile은 업데이트되지만, Docker 이미지가 자동으로 빌드되거나 실행되지는 않습니다.