Docker

[Docker] 도커 이미지 아키텍쳐 오류

sian han 2025. 2. 5. 16:07

배경

Spring Boot 프로젝트 내부 Dockerfile 생성 & 설정 내용은 아래와 같다.

  1. 베이스 이미지 설정
  2. 빌드 시점에 사용할 변수를 선언
    • ARG : Docker 이미지를 빌드할 때만 사용 가능한 변수
    • build/libs : 일반적으로 Gradle 프로젝트의 JAR 파일이 생성되는 디렉토리
  3. 로컬 파일을 Docker 이미지에 복사
    • COPY : Docker 이미지 빌드 중 로컬 시스템의 파일을 컨테이너의 지정된 경로로 복사함
  4. 컨테이너가 실행될 때 수행할 기본 명령어를 설정
    • java: Java 실행 명령어
    • -Dspring.profiles.active=docker: Spring Boot 애플리케이션에서 활성화할 프로파일을 docker로 설정
    • -jar: JAR 파일을 실행하기 위한 Java 옵션
FROM openjdk:23-jdk-slim
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "app.jar"]

 

 

Dockerfile 기반으로 만들어진 이미지를 docker build -t 명령어를 사용하여 빌드함

 

 

 

이슈

EC2 서버 내에서 컨테이너를 생성&실행하기 위해 docker run 명령어를 실행했을 때 아래와 같은 오류가 발생함.

docker: no matching manifest for linux/amd64 in the manifest list entries.

 

  • 호스트(m1) 와 EC2 서버의 아키텍처가 호환되지 않아서 발생하는 오류이다.
  • 호스트 시스템(m1)에서 빌드한 이미지는 linux/arm64 아키텍처를 가지고, EC2 도커 호스트는 linux/amd64 아키텍처를 가지고 있다.
  • 따라서 이미지를 빌드할 때 linux/arm64 아키텍처로 재빌드 하여 Docker hub 에 push 한다.

 

해결

  • --platform명령어를 사용하여 inux/amd64 아키텍처를 지정하여 재빌드
docker buildx build --platform linux/amd64,linux/arm64 -t ~ .

 

before

after