[Docker] Docker Image를 DockerHub로 배포 시 아키텍처 호환 문제 해결하기(Mac M1)

2023. 9. 12. 18:59
반응형

 

 

Mac M1에서 Dockerfile을 빌드하여, Dockerhub에 배포한 후, AWS의 Ubuntu에 해당 이미지를 다운로드 받은 후, Docker-compose를 통해 배포하려고 시도하였다..

 

해당 과정에서, Dockerfile의 이미지를 내려받는 중 JDK 플랫폼 불일치 에러 "exec format error"가 발생하였다.

 

"exec /usr/local/openjdk-11/bin/java: exec format error

 

 

 

구글링을 통해 나온 해당 문제점은 아래와 같았다.

 

Mac M1에서 Docker 빌드한 이미지는 ARM64 아키텍처를 사용하므로, Ubuntu 서버에서 실행하려면 AMD64 아키텍처에 호환되는 이미지를 빌드해야 한다.

 

 

 

 

 

즉, Mac OS의 M1에서 발생하는 고질적인 문제가 원인이었으며, 일반적으로는 아키텍처가 호환이 되어야 하는데, 안되던 것이 문제였다.

 

 

 


일반적인 Dockerhub Push 방법

 

FROM openjdk:11

WORKDIR /app/wisefee/

ARG JAR_PATH=../build/libs/
ARG RESOURCES_PATH=../build/resources/main/

COPY ${JAR_PATH}/*.jar /app/wisefee/wisefee.jar

ARG SPRING_PROFILES_ACTIVE=prod
ENV SPRING_PROFILES_ACTIVE=$SPRING_PROFILES_ACTIVE

ENTRYPOINT ["java", "-jar", "wisefee.jar"]

해당 내용은 필자가 DockerHub에 올리려는 Dockerfile이다.

 

일반적으로는 docker의 Image를 빌드하는 방법은 아래와 같을 것이다.

 

 

1. Dockerfile이 위치한 디렉터리에서 Dockerfile 빌드 후, 태그 붙이기

docker build -t YOUR_DOCKERHUB_ID/YOUR_TAG_NAME .
# docker build -t sjh9708/devserver-wisefee-app5 .

 

2. Dockerhub 로그인하기

docker login

 

 

3. Dockerhub에 Push하기

docker push YOUR_DOCKERHUB_ID/YOUR_TAG_NAME 
# docker push sjh9708/devserver-wisefee-app5

 

해당 과정까지 마치면 Dockerfile이 빌드되어 나온 이미지가 Dockerhub에 배포될 것이다.

하지만 M1에서 해당 과정을 실행하면 다른 컴퓨터인 Ubuntu에서 배포한 이미지를 사용하는 데에 문제가 생겼던 것이다.

 

 


Multi-Platform 이미지 Push하기

 

그래서 이미지를 다른 플랫폼에서 호환되도록 만드는 방법으로 멀티 플랫폼을 지정하여 이미지를 빌드하고 푸시하는 방법이 있었다.

 

docker buildx build --platform=linux/amd64,linux/arm64 -t YOUR_DOCKERHUB_ID/YOUR_TAG_NAME . --push
# docker buildx build --platform=linux/amd64,linux/arm64 -t sjh9708/devserver-wisefee-app5 . --push

buildx라는 명령어를 통해 linux/amd64, linux/arm64 플랫폼에서 사용할 수 있는 형태의 이미지로 빌드한다.

--push 명령어를 붙여주면, 별도로 push 명령을 하지 않아도 빌드와 동시에 이미지가 Dockerhub에 푸시된다.

 

 

 

 


 

해당 과정까지 마친 이미지를 Ubuntu 환경에서 사용하니, 정상적으로 사용이 가능했다.

 

 

 

 

 

 

 

참고글 : https://velog.io/@baeyuna97/exec-user-process-caused-exec-format-error-%EC%97%90%EB%9F%AC%ED%95%B4%EA%B2%B0

 

exec user process caused “exec format error” 에러해결

docker image build시 이런에러가 날 떄가 있습니다.원인 : 운영체제 차이해결방법 : 빌드시 태그 추가

velog.io

 

반응형

BELATED ARTICLES

more