트러블슈팅

카카오 클라우드 & Kubernetes 환경에 CD 트러블 슈팅 - 4

sowakemeup 2025. 8. 12. 16:49

문제:

기본 jnlp파일을 사용하지 않고 java 21을 사용하고, kubectl 도 사용하는 커스텀 jnlp파일을 사용했는데 docker hub에 업로드하는 과정에서 계속 빌드 오류가 났습니다.

 

에러 코드:

ERROR: failed to solve: process "/bin/sh -c apt-get update &&     apt-get install -y --no-install-recommends ca-certificates &&     echo \"deb http://deb.debian.org/debian bookworm-backports main\" > /etc/apt/sources.list.d/backports.list &&     apt-get update &&     apt-get install -y -t bookworm-backports --no-install-recommends openjdk-21-jdk &&     apt-get install -y --no-install-recommends docker.io curl &&     curl -LO \"https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${TARGETARCH}/kubectl\" &&     install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl &&     rm kubectl &&     apt-get clean &&     rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100

 

원인:

“아키텍쳐” 문제

로그에 arm64라고 표시된 것처럼, 현재 Apple Silicon(M1/M2/M3) Mac과 같은 ARM 아키텍처 환경에서 Docker 이미지를 빌드하고 있었습니다.

문제는 openjdk-21-jdk 패키지가 데비안 backports 저장소에 amd64(일반적인 Intel/AMD PC)용으로는 존재하지만, arm64용으로는 제공되지 않는다는 점입니다. 따라서 apt-get 명령어는 저장소에 접속하더라도 해당 아키텍처의 패키지를 찾을 수 없어서 계속 오류를 발생시킨 것입니다.

따라서, 패키지 관리자 (apt)를 통해서 설치할 수 없으므로 java 21을 수동으로 직접 다운로드하여 설치하는 방식으로 Dockerfile을 수정해야 합니다.

 

Dockerfile 수정사항:

  1. apt-get으로 Java 설치하는 대신, wget 사용하여 신뢰할 있는 Adoptium(Eclipse Temurin) 프로젝트에서 Java 21 바이너리(tar.gz 파일) 직접 다운로드합니다.
  2. 다운로드한 파일을 /opt/jdk 디렉터리에 압축 해제하여 설치합니다.
  3. JAVA_HOME 환경 변수를 새로운 설치 경로인 /opt/jdk 정확하게 지정합니다.