배경
Spring Boot 프로젝트 내부 Dockerfile 생성 & 설정 내용은 아래와 같다.
- 베이스 이미지 설정
- 빌드 시점에 사용할 변수를 선언
- ARG : Docker 이미지를 빌드할 때만 사용 가능한 변수
- build/libs : 일반적으로 Gradle 프로젝트의 JAR 파일이 생성되는 디렉토리
- 로컬 파일을 Docker 이미지에 복사
- COPY : Docker 이미지 빌드 중 로컬 시스템의 파일을 컨테이너의 지정된 경로로 복사함
- 컨테이너가 실행될 때 수행할 기본 명령어를 설정
- 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

'Docker' 카테고리의 다른 글
| [Docker] EC2서버 에 Mysql 컨테이너 생성 (0) | 2025.02.05 |
|---|---|
| [프로젝트] NestJS, NextJS 도커 환경 설정 (도커 네트워크) (1) | 2023.05.14 |
| [Docker] 도커 볼륨 / 도커 네트워크 구조 (0) | 2023.02.05 |
| [Docker] 도커 이미지 / 컨테이너 생성 및 접근 (0) | 2023.01.24 |
| [Docker] 도커에 Server 올려서 실행하기 (0) | 2023.01.02 |