-
Docker 이미지 플랫폼 호환성 에러 (linux/amd64)그 외 다양한 웹 지식 2024. 1. 9. 22:18반응형

오늘 Docker를 통해 배포를 하면서 겪은 것은 호환성 에러에 관한 것이다.
기존에 외부 업체에 맡겼던 Next.js로 만들어진 결제 관련 웹앱을 마이그레이션 및 수정 후 Docker로 배포까지 진행하게 되었다.
이 때 프론트단의 역할은 Dockerfile을 포함해 빌드를 압축해서 Filezlia에 올리는 것까지를 목표로 했다.
문제의 발단은 Docker run을 하면서 발생했다.
아래와 같은 호환성 문제로 인한 에러 메시지가 나타났고 이는 Build할 때까지는 문제가 없었는데 Docker run을 할 때 정상적으로 서버가 실행되지 않았다.
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested
Docker image와 aws의 호환성 문제
위 에러를 해석해보자.
경고: 요청된 이미지의 플랫폼(linux/arm64/v8)이 탐지된 호스트 플랫폼(linux/amd64/v3)과 일치하지 않으며 특정 플랫폼이 요청되지 않았습니다
다시 말해 각 플랫폼의 호환이 되지 않는다는 것이다.
나는 회사에서 맥북 M2 pro를 사용하고 있는데 도커가 이 이미지를 빌드할 때 생성된 빌드 플랫폼이 aws ec2서버와 맥북 m2 pro의 각각 호환성이 맞지 않는 것이다.
어떻게 해결해야할까...?
방법은 서치해보니 금방 나왔고 생각보다 간단했다.
도커 이미지를 빌드할 때 platform에 관한 것을 추가해주면 되는 것이었다.
우리가 일반적으로 사용하고 있는 docker build command는 아래와 비슷할 것이다.
docker build -t [원하는 이미지명] .
※ 참고 : 끝에 마침표(.)는 오타가 아니다
docker build만 해도 되지만 -t [이미지명] 을 추가해서 이미지명을 정할 수 있다.
그런데 이 때 이렇게만 빌드하는 것이 아니라 아래와 같이 platform을 추가하면 된다.
docker build --platform linux/amd64 -t [원하는 이미지명] .
이렇게 해서 로컬에서 docker image를 빌드해서 각자의 클라우드 서버와 호환성을 맞춰주고 docker run 하면 정상 실행 된다.
추가
추가로 docker run 명령어와 압축과 압축해제 방법을 보자면...
- 3000번 포트로 docker run 하는 방법
docker run -d -p 3000:3000 --name [컨테이너명] [빌드한 이미지명]
- tar 확장자로 압축
docker save -o [압축파일명].tar [빌드한 이미지명]
- tar 압축 풀기
docker load < [압축파일명].tar
참고 사이트
반응형'그 외 다양한 웹 지식' 카테고리의 다른 글
Vite + React + typescript 기반의 PWA 만들기 (3) 2024.07.17 Nextjs + Docker를 통한 멀티 스테이지 빌더(multi-stage builder) (2) 2024.03.20 타임존(UTC, GMT)과 날짜 포맷(Date format) 그리고 luxon (1) 2023.06.28 웹페이지 미리보기 : OGP(OG) (Open Graph protocol) (1) 2022.01.03 Open Graph Protocol 오픈 그래프 프로토콜 간단하게 알아보기 (1) 2021.12.06