(docker) no match for platform in manifest
해당 에러는 Apple M1(Silicon) 환경에서 docker image를 build 하는 과정 중 발생한 문제입니다.
M1 환경은 기본적으로 ARM 기반 아키텍처인데요. 때문에 해당 환경에서 도커 이미지를 빌드하면 platform이 'linux/arm64'로 생성됩니다.
발생한 에러 메시지인 'maven:3.6.3-jdk-8: no match for platform in manifest...'라는 문구를 통해 원인을 유추해 보면 'maven:3.6.3-jdk-8'을 사용하는데 platform이 맞지 않는다? 정도로 생각해 볼 수 있었는데요.
관련 정보를 찾아보던 중 일부 docker image에서 Apple M1 칩을 지원하지 않는다는 내용들을 볼 수 있었는데, linux/arm64 platform에서 maven:3.6.3-jdk-8을 지원하지 않기 때문에 발생하는 문제인 것 같았습니다.
//기존의 docker image build 명령어
docker build -t my-docker .
//--platform 옵션이 추가된 docker image build 명령어
docker build --platform linux/amd64 -t my-docker .
해결 방법으로는 docker image build 시 위와 같이 '--platform' 옵션을 통해 platform을 'linux/amd64'로 지정해 주었고, 그 결과 아래 이미지와 같이 해당 도커 이미지가 정상적으로 빌드되는 것을 확인할 수 있었습니다.
추가적으로 'docker compose'를 사용하는 경우 아래와 같이 platform을 명시해 줌으로써 같은 문제를 해결할 수 있습니다.
version: '3.6'
services:
mysql:
image: mysql
platform: linux/amd64 //해당 라인을 추가하여 platform을 명시
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_HOST: localhost
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_USER: user
MYSQL_PASSWORD: password
(docker-compose.yml 예시)
< 참고 자료 >
https://kim-dragon.tistory.com/152
https://onexlab-io.medium.com/apple-m1-chip-no-matching-manifest-for-linux-arm64-v8-docker-mysql-5142060a9309