[Docker] M1 mac 이미지 배포 오류

강버섯·2022년 1월 11일
0

👉 발단

배포할 파일은 작성된 build.sh를 이용해서 도커 이미지를 생성하고 registry에 올린 뒤 배포를 진행하려고 했는데, 이미지 생성과 push는 성공하나 배포에서 계속 문제가 발생했다.
k9s에서 배포할 이미지로 값을 수정하면 pod가 만들어져야하는데, registry에 이미지가 존재함에도 실행이 불가하다는 에러가 계속 발생했다.

👉 문제 발생 이유

✏️ 과정

찾아보니 entrypoint.sh 파일의 실행 권한이 없을 경우에 발생할 수 있는 문제라고 해서 일단 chmod +x entrypoint.sh 를 통해 권한을 바꿔주고 다시 이미지를 생성해봤다.
사실 실행 권한을 확인해보니 이미 권한이 있기는 했다.

다시 이미지를 빌드해서 시도했으나, 또다시 실패.
에러 내용은 이전과 동일했다.

이상하다 싶어서 다른 분의 노트북으로 이미지를 빌드해서 배포를 시도했더니 별 문제 없이 배포가 마무리되는 현상을 확인할 수 있었다.
차이점이라고는 코어의 차이(M1 or Intel) 였는데, 설마 그게 문제일까하는 생각이 들기는 했다.

✏️ 원인

결론적으로 코어가 다르게 때문에 발생한 문게였다.
M1 mac에서는 docker 이미지 빌드를 할 때 "arm" 으로 빌드를 하는 반면 intel은 "amd" 로 빌드를 한다.
이렇게 빌드된 "arm" 이미지를 aws에서 돌리려고 한 것인데, aws에서는 arm으로 빌드된 이미지를 실행할 수 없어서 계속해서 에러가 발생하게 된 것이었다.

👉 해결

docker 이미지 빌드 옵션 중에 "amd"로 빌드하도록 지정하는 옵션이 있어서 그 부분을 build.sh에 추가해주도록했다.

DOCKER_BUILD_OPTS=
if [[ $(arch) == 'arm64' ]]; then
  DOCKER_BUILD_OPTS="--platform=linux/amd64"
fi

${DOCKERCLI} build $DOCKER_BUILD_OPTS -t ${IMAGE_NAME} . -f ./docker/Dockerfile

를 추가해서 이미지 빌드를 하고 aws에 배포를 실행하니 에러 없이 해결할 수 있었다!

정말 뭐가 문제인지 싶었는데,,,,,
문제 해결해 주신 리드님께 무한 감사,,,,😭

profile
무럭무럭 버섯농장

0개의 댓글