상황
이미지 빌드
docker build -t $IMAGE_NAME:$IMAGE_TAG --progress=plain --platform linux/amd64 ..
이미지 실행 후
에러메세지
qemu: uncaught target signal 6 (Aborted) - core dumped
경고
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
원인
M1(arm64) 칩에서 Intel(amd64) 컨테이너를 실행
빌드할 때 --platform 옵션으로 빌드 출력의 대상 플랫폼(예: linux/amd64, linux/arm64또는 darwin/amd64)을 지정한다.
그런데 m1 노트북으로 도커파일을 빌드하여 도커이미지를 생성하면 platform이 linux/arm64으로 생성된다.
그럼에도불구하고 방금 명령어를 linux/amd64로 지정하여 도커를 빌드했기때문에 문젝 발생한것.
참고로 MAC m1 OS(Loca)이 아니라 아마존 리눅스를 사용하는 aws ec2에서는 linux/amd64로 docker 이미지가 생성된다.
결국 맥북 m1에서 도커 컨테이너를 띄우려는 환경(linux/arm64)이랑 지정된 출력대상의 플랫폼(linux/amd64)이 달라서 생긴문제.
실제로 docker 측에서도 버그 리포트라고 인정(?)했다.
https://github.com/docker/for-mac/issues/5342
https://github.com/docker/for-mac/issues/5148
해결
m1 노트북으로 도커파일을 빌드하여 도커이미지를 생성하려면 맥 아키텍쳐에 맞춰서 이미지를 빌드한다.
docker build -t $IMAGE_NAME:$IMAGE_TAG --progress=plain --platform linux/arm64 .
음 뒤에 platform 옵션을 지우고 그냥 이미지를 빌드 해도 되네?ㅎ
docker build -t $IMAGE_NAME:$IMAGE_TAG --progress=plain .
참고로 해당 이미지가 어떤 아키텍쳐 기반으로 만들어졌는지 아래와 같은 명령어로 볼수 있다.
sudo docker image inspect [이미지ID] | grep Architecture
'🌴 DevOps > Docker & K8s' 카테고리의 다른 글
[유데미 강의 정리 1] docker 개념 및 도커 네트워킹 통신 (0) | 2024.03.31 |
---|---|
🐘 [Docker] 빅데이터환경구성 (최종) - Hadoop&Spark 설치 (0) | 2021.09.07 |
[Docker] (보류) 도커허브에 이미지 배포 +TroubleShooting (0) | 2021.07.27 |
[Docker]빅데이터 분석환경 구성4-Zeppelin0.9 설치 (0) | 2021.07.27 |
[Docker] 빅데이터 분석환경구성3-Spark 3.0설치 (0) | 2021.07.27 |
[Docker] 빅데이터 분석환경구성2-Hadoop 2.7.7 (0) | 2021.07.27 |