[Docker] 이미지 빌드 플랫폼 호환성 관련 에러 (linux/amd64)

msung99·2023년 1월 5일
0

Cloud(Infra, DevOps)

목록 보기
14/22
post-thumbnail

시작에 앞서

지난 포스팅 [Docker] SpringBoot jar 파일을 도커를 이용해 EC2 서버에 배포하기 에서 Apple M1 의 경우 Docker 이미지의 빌드 호환성 문제가 있어서, 이를 해결하기 위한 방법을 간단히나마 알려드렸습니다. 그런데 왜 호환성 문제가 발생하는 것인지에 대해 이번에 더 자세히 다루고자 합니다.


문제발생 상황 : 로컬에서 도커 이미지를 빌드했을때는 문제가 없었다 🧐

분명 로컬에서 생성한 도커 이미지를 실행시켰을 때는 정상적으로 실행되었습니다. 따라서 클라우드 서버에서도 pull 받은 도커 이미지를 빌드하고 실행시켰을 때 문제가 당연히 없을 것이라 생각했습니다.

그러나 docker run 을 했을때 아래와 같은 호환성 에러 메시지를 발견했고, 정상적으로 서버가 실헹되지 않았습니다.

WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested standard_init_linux.go:228: exec user process caused: exec format error


Docker Image의 빌드 호환성 문제 : linux amd64/v8, linux amd64

에러 메시지를 읽어보니 호환성 문제였습니다. 현재 제가 쓰고있는 맥북이 Apple M1칩인데, 도커가 해당 이미지를 빌드할때 생성된 빌드 플랫폼이 ec2서버와 m1 맥북간의 호환성이 안맞는 문제였습니다.


해결방법: 도커 이미지를 다시 build 하다

핵심부터 말씀드리자면 Docker Image 를 빌드할 때 아래 문장을 신경써서 플랫폼을 맞춰주면 됩니다.

--platform linux/amd64

  • 로컬에서 빌드한 이미지가 linux/arm64/v8 이므로, 이를 linux/amd64 플랫폼 형태의 이미지로 새롭게 빌드해야 합니다.

docker build --platform linux/amd64 -t msung99/maestro:0.1.0 .

위와 같이 로컬에서 다시 도커 이미지를 빌드해서, 클라우드 서버와 호환성을 맞춰주시면 돱니다. 즉, linux/amd64 로 빌드하고 클라우드 서버에 다시 run 시킨다면 문제없이 정상 실행됩니다.

또한 당연할 말이지만, 로컬에서 방금 호환성 문제를 해결하기 위해 만든 이미지를 run 시킨다면 정상 실행되지 않을겁니다. 클라우드 서버에 맞춰서 도커 이미지를 빌드한 것이기 때문에, 로컬의 m1 칩 환경에서는 실행되지 않는것이 정상입니다.


참고

StackOverflow : Docker on Mac M1 gives: "The requested image's platform (linux/amd64) does not match the detected host platform"

[Docker] 이미지 플랫폼 관련 에러(The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) ...)

맥 mac에서 도커 에러

profile
꾸준히 성장하는 과정속에서, 제 지식을 많은 사람들과 공유하기 위한 블로그입니다 😉

0개의 댓글