우당탕탕 개발일지
[Back] NullPointerException 발생: JDK와 컨터이너와의 상호작용 문제? 본문
내가 생각하는 오류 원인
계속 동일하게 아래와 같은 로그가 발생했고, 이는 JDK 17과 컨테이너와의 상호작용 문제일 수도 있다고 했다.
java.lang.NullPointerException: Cannot invoke "jdk.internal.platform.CgroupInfo.getMountPoint()" because "anyController" is null
해결방안1. 옵션 추가
그래서 이를 해결하기 위해 옵션을 추가하라는 조언을 얻었다.
Dokcerfile 수정 혹은 도커 컨테이너 실행할 때이다.
1. Dockerfile 수정
아래는 JVM 옵션 설정을 추가한 Dockerfile이다. 이를 통해 다시 배포했다.
# 사용할 기본 이미지
FROM openjdk:17-jdk-slim
# JVM 옵션 설정: Cgroup 관련 NPE 오류를 해결합니다.
ENV JAVA_TOOL_OPTIONS="--add-opens=java.base/jdk.internal.platform=ALL-UNNAMED"
# 컨테이너의 작업 디렉토리를 설정합니다.
WORKDIR /app
# 로컬의 JAR 파일을 컨테이너의 작업 디렉토리로 복사합니다.
COPY Moivo-0.0.3-SNAPSHOT.jar /app/Moivo-SNAPSHOT.jar
# 애플리케이션이 사용하는 포트를 외부에 노출합니다. (일반적으로 8080)
EXPOSE 8080
# 컨테이너가 실행될 때 JAR 파일을 실행하는 명령어를 지정합니다.
# CMD를 사용하면 docker run에서 추가 옵션을 줄 수 있습니다.
CMD ["java","-jar","Moivo-SNAPSHOT.jar"]
하지만 오류만 발생하고 끝났다....
2. Docker Run 명령어 수정
아래와 같이 옵션을 추가하여 컨테이너 실행했다.
docker run -d -p 8080:8080 --name moivo-back-container -e JAVA_TOOL_OPTIONS="--add-opens=java.base/jdk.internal.platform=ALL-UNNAMED" moivo-back-container
하지만 똑같이 NullPointerException 발생....
해결방안 2. 메트릭 설정 비활성화
spring boot 프로젝트의 application.yml 파일에서 메트릭 설정을 비활성화했다.
해당 설정을 통해 애플리케이션이 Docker 컨테이너에서 실행될 때 발생하는 오류를 방지하기 위해서라고 한다.
management:
metrics:
enable:
process: false # 현재 프로세스의 CPU, 메모리 정보 수집 중단
system: false # OS 레벨의 시스템 정보 수집 중단
jvm: false # JVM 내부 정보(GC, 메모리 등) 수집 중단
그치만 해결방안1과 동일하게 실패했다.
해결방안 3. JDK 21 버전 수정
도커파일이랑 build.gradle의 21로 수정하여 다시 해봤다.
헐!!!!!
물론 성공은 아니지만...!!!!! 이 화면이라도 너무 기쁘다..... 3일만에 처음 보는 화면이다...
방화벽 문제라고 판단하여 일단 전체로 열어볼려고 한다.
인스턴스 인바운드 규칙 수정 후, 성공...!! ㅠㅠ
결국 자바 버전 문제였다......
어제 진행했던 깡통 프로젝트도 17버전이었는데 뭐가 다른지 모르겠다. 작게 예상해보자면 해당 프로젝트에는 너무 많은 것들이 있어서이지 않을까 싶다.
NCP + Kakao Login + SMTP + MySql + Redis + JWT 등등.... 외부 라이브러리를 가져오는게 많기 때문에...
해당 부분을 제미나이한테 물어봤더니 아마 맞는 것 같다..!
'개발 프로젝트 > Moivo' 카테고리의 다른 글
[Front] 프론트 도커 배포 및 백엔드와 연동 (1) | 2025.09.04 |
---|---|
[Back] AWS Docker 배포 Test (0) | 2025.09.02 |
[Docker & Back] Dockerfile? Docker Image? (0) | 2025.09.01 |
[AWS] EC2 생성, SSH 접속, RDS(Mysql) 구축 (1) | 2025.08.28 |
AWS + Kubernetes + Docker + GitLab CI (3) | 2025.08.27 |