- Dockerfile의 ENTRYPOINT
ENTRYPOINT ["sh", "-c", "java -jar admin.jar"]
이 부분은 컨테이너가 켜질 때 “항상” 실행되는 커맨드만 지정한 거고, 그 안에 프로파일을 직접 넘기는 플래그는 없어요.
- ENV/Spring Boot 자동 프로파일 로딩
- Spring Boot는 커맨드를 통해
Dspring.profiles.active
를 넘기지 않아도, - 프로세스 환경 변수
SPRING_PROFILES_ACTIVE
가 있으면 자동으로spring.profiles.active
로 인식합니다. - 즉,
java -jar admin.jar
만 실행해도, 만약 환경에
SPRING_PROFILES_ACTIVE=prod
라는 변수가 있으면 Spring Boot가 알아서
prod
프로파일로 부팅합니다.- Kubernetes Deployment에서 ENV 주입
Helm 템플릿(또는
kubectl apply
) 로 아래처럼 env:
블록을 추가하면,containers: - name: admin image: ... env: - name: SPRING_PROFILES_ACTIVE value: "{{ .Values.profile }}"
→ 컨테이너가 기동될 때 실제 프로세스 환경에
SPRING_PROFILES_ACTIVE
가 설정됩니다.→ ENTRYPOINT 커맨드는 그 값을 그대로 물려받아서
java -jar ...
실행 시 Spring Boot가 인식하게 되는 거예요.- 확인 방법
kubectl exec -it <pod> -- env | grep SPRING_PROFILES_ACTIVE
kubectl logs <pod>
→ 제대로 주입됐는지 확인
→ 부팅 로그 상단에
The following profiles are active: dev
처럼 뜨는지 확인
- 만약 자바 옵션으로 강제 전달하고 싶다면
ENTRYPOINT를 다음처럼 바꿀 수도 있습니다.
command: ["sh", "-c"] args: - java -Dspring.profiles.active=$SPRING_PROFILES_ACTIVE -jar admin.jar
하지만 보통은 필요 없습니다. Spring Boot가 환경 변수를 자동으로 읽어요.
결론
- Deployment의
env:
로 주입한SPRING_PROFILES_ACTIVE
가 ENTRYPOINT 실행 시점에 이미 환경 변수로 설정되어 있고,
- Spring Boot는
java -jar …
만으로도 그 환경 변수를 읽어 프로파일을 활성화합니다.
따라서 별도의 CMD/ENTRYPOINT 수정 없이
env:
만 잘 설정해 주시면 프로파일이 원하는 대로 반영될 거예요.