본문 바로가기

맥(솔라리스)

M1에서 Docker 이미지 실행 시 no matching manifest 에러 해결하기

반응형

M1(Mac Silicon)에서 Docker 이미지 실행 시 no matching manifest 에러 해결하기

Apple Silicon(M1, M2 등 ARM 기반) 환경에서 mysql:5.7.32 이미지를 Docker로 실행하려고 할 때 다음과 같은 에러 메시지를 자주 만나게 됩니다.

no matching manifest for linux/arm64/v8 in the manifest list entries

이는 해당 Docker 이미지가 ARM 아키텍처를 공식적으로 지원하지 않기 때문입니다. 기본적으로 M1/M2에서는 linux/arm64 플랫폼을 사용하지만, mysql:5.7.32는 linux/x86_64만 지원합니다.

문제 상황

docker-compose.yml 파일

vim docker-compose.yml
version: '3.9'
services:

  ###MySQL Service
  db:
    image: mysql:5.7.32
    container_name: db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: laravel_db
      MYSQL_USER: laravel
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: P@ssword
      SERVICE_NAME: php
      SERVICE_TAGS: dev
    volumes:
      - ./mysql/data:/var/lib/mysql:rw
    expose:
      - 3306
    ports:
      - 3306:3306
    networks:
      - app-network
docker-compose --build
[+] Running 0/1
⠇ db Pulling 3.7s
no matching manifest for linux/arm64/v8 in the manifest list entries

M1(silicon) 버전에 MySQL 컨테이너 실행 시 위와 같이 에러가 발생합니다.

728x90

해결 방법: 플랫폼 지정(platform: linux/x86_64)

Docker는 명시적으로 실행할 플랫폼을 지정할 수 있는 기능을 제공합니다.

docker-compose.yml에 다음과 같이 platform 항목을 추가해줍니다.

vim docker-compose.yml
version: '3.9'
services:

  ###MySQL Service
  db:
    platform: linux/x86_64
    image: mysql:5.7.32
    container_name: db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: laravel_db
      MYSQL_USER: laravel
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: P@ssword
      SERVICE_NAME: php
      SERVICE_TAGS: dev
    volumes:
      - ./mysql/data:/var/lib/mysql:rw
    expose:
      - 3306
    ports:
      - 3306:3306
    networks:
      - app-network

이렇게 설정하면 Docker가 x86_64 아키텍처용 이미지를 다운로드하고 실행할 수 있도록 에뮬레이션(QEMU)을 활용하게 됩니다.

실행 결과

다시 빌드 명령어 실행

docker-compose --build
[+] Running 12/12
⠿ db Pulled
⠿ a076a628af6f Pull complete
⠿ f6c208f3f991 Pull complete
⠿ 88a9455a9165 Pull complete
⠿ fadfb9734ed2 Pull complete
[+] Building 11.4s (20/21)

 

참고 사항

  • platform: linux/x86_64 옵션은 ARM 기반 Docker 환경에서 x86 아키텍처 이미지가 필요할 때 꼭 필요한 설정입니다.
  • 다만 에뮬레이션으로 동작하기 때문에 성능이 다소 떨어질 수 있으며, 가능하다면 ARM을 지원하는 이미지로 대체하는 것이 권장됩니다.
  • 공식적으로 ARM64를 지원하는 MySQL 이미지가 필요한 경우, mysql:8 이상 또는 mariadb 같은 대체 이미지를 고려해볼 수 있습니다.

 

반응형