후니의 IT인프라 사전

[Error] no match for platform in manifest: not found 본문

카테고리 없음

[Error] no match for platform in manifest: not found

james_janghun 2024. 10. 31. 11:07

문제

컨테이너를 배포하였는데, 다음과 같이 no match for platform 에러가 발생한다면, 당신이 사용하는 컨테이너 이미지가 실제 컨테이너 환경의 호스트의 아키텍처와 일치하지 않기 때문에 발생하는 에러이다.

  Warning  Failed     9s (x3 over 55s)   kubelet            Failed to pull image "kingdom0220/version-patch:v1": rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/kingdom0220/version-patch:v1": no match for platform in manifest: not found
  Warning  Failed     9s (x3 over 55s)   kubelet            Error: ErrImagePull

 

 

해결

당신이 사용하는 호스트 서버의 아키텍처에 맞춘 이미지를 사용하면 된다.

 

현재 자신의 아키텍처 확인

arch

  x86_64 : 보통 amd64이다.

 

 

빌드방법

docker buildx inspect --bootstrap 명령어를 통해서 현재 buildx가 지원하는 플랫폼을 확인할 수 있다.

확인해보니까 도커버전이나 사용하는 아키텍처 서버마다 지원하는 플랫폼이 다르기 때문에 반드시 확인해 보기 바란다.

Name:   multiarch-builder
Driver: docker-container

Nodes:
Name:      multiarch-builder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Platforms: linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

 

빌드 명령어

이런식으로 --platform 옵션을 통해서 사용할 플랫폼을 명시해서 빌드해주면 된다.

docker buildx build \
--push \
--platform linux/arm64/v8,linux/amd64 \
--tag james/build-test:v1 .

 

실제로 빌드하면 이렇게 arch 선택이 가능하다.

 

세부적인 방법

기본적으로 docker build 를 써서 단일 플랫폼으로만 이미지를 빌드하는데, docker buildx라는 기능이 docker 20버전부터 사용할 수 있게 되었다. 

docker buildx를 사용하면 멀티플랫폼 빌드가 가능하다.

 

이 분의 블로그가 너무 잘 정리되어 있어서 가져왔다.

https://gurumee92.tistory.com/311