카테고리 없음

ecs 환경변수 적용 안됨

코딩연습중 2025. 5. 26. 16:15

1. ec2 접속해서 해당 컨테이너 접속

docker ps로 접속하고자 하는 컨테이너 아이디 확인

docker exec -it [컨테이너 id] /bin/sh

들어가서, telnet 172.17.0.6 6379

했는데 connected 됨

ping 보내면 pong 옴.

 

해당 컨테이너에서

$REDIS_HOST 확인해봤는데 잘 되어있음.

 

그런데도 자꾸 localhost로 적용됨.

도커파일의 문제 같음

 

 

좋아. 너가 링크한 글에서처럼 Dockerfile의 ENTRYPOINT와 CMD 사용 방식은 쉘 모드(sh -c)로 설정하지 않으면 환경 변수 치환이 안 되는 문제를 겪게 돼. 지금 너가 겪은 문제도 바로 그거야. 정리해서 설명할게.


✅ 문제 핵심: 환경변수 ${REDIS_HOST}가 Java 실행 시점에 치환되지 않음

Dockerfile에 이렇게 돼 있으면:

ENTRYPOINT ["java", "-jar"]
CMD ["app.jar"]

이건 exec form이고, sh 셸을 거치지 않기 때문에 ${REDIS_HOST} 같은 환경변수는 치환되지 않아.

그래서 application.yml에서 ${REDIS_HOST:172.17.0.6} 이렇게 적었더라도, Java는 그걸 "그냥 문자열"로 받아들여서 기본값인 localhost를 사용하게 돼.


✅ 해결법: 셸 스크립트처럼 실행되도록 변경

✅ 방식 1: sh -c로 감싸기 (추천)

ENTRYPOINT ["sh", "-c"]
CMD ["java -jar app.jar"]

이 구조는 결국 다음과 같은 명령으로 해석됨:

sh -c "java -jar app.jar"

→ 이때 환경변수들이 sh 셸 안에서 먼저 해석되기 때문에 ${REDIS_HOST} 등의 값이 정상 반영됨.


📘 왜 이렇게 해야 할까?

  • ENTRYPOINT ["java", "-jar"] → exec form → 환경변수 미해석
  • ENTRYPOINT ["sh", "-c"] → shell form → 환경변수 해석 가능

✅ 완성된 Dockerfile 예시

FROM openjdk:17-jdk-slim

WORKDIR /app

# JAR 파일 복사
COPY build/libs/*SNAPSHOT.jar app.jar

# 포트 노출 (예: 8081)
EXPOSE 8081

# 실행
ENTRYPOINT ["sh", "-c"]
CMD ["java -jar app.jar"]

✍️ 추가 팁: application.yml 기본값도 지정해둬

spring:
  data:
    redis:
      host: ${REDIS_HOST:172.17.0.6}
      port: 6379

이렇게 하면 환경변수가 없을 때 기본값으로 172.17.0.6이 들어감.


🧪 확인용 로그 코드도 같이 넣기

@PostConstruct
public void logRedisConfig() {
    log.info("🔍 Redis 연결 정보 - host: {}, port: {}", redisHost, redisPort);
}

✅ 정리

항목 설명

문제 ${REDIS_HOST}가 Java 실행 시 치환 안 됨
원인 ENTRYPOINT ["java", "-jar"]는 exec form
해결 ENTRYPOINT ["sh", "-c"], CMD ["java -jar app.jar"] 사용
이점 환경변수 치환 가능, Spring에서 정상 인식됨

혹시 너가 Gradle 빌드 → Docker 이미지 빌드 → ECS 배포까지 자동화하고 있다면, Dockerfile 수정 후 다시 이미지 빌드해서 푸시하고 태스크 다시 띄우면 정상 연결 확인할 수 있을 거야.
필요하면 build.gradle 쪽도 확인해줄게.

 

 

 

 

 

 

 

 

https://sheerheart.tistory.com/entry/Dockerfile-%EC%97%90%EC%84%9C-CMD-ENTRYPOINT-%EC%82%AC%EC%9A%A9%EC%8B%9C-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EB%A1%9C%EB%94%A9-%EB%AC%B8%EC%A0%9C