Programming/Error

(docker) maven:3.6.3-jdk-8: no match for platform in manifest

Jan92 2023. 10. 25. 21:37

(docker) no match for platform in manifest

(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 build --platform

 

 

추가적으로 '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