TIL/2025

'docker run --rm' 명령의 의미와 환경 변수

고무 오리 2025. 4. 15. 20:25
728x90
📢 회사에서 정적분석 도구 환경을 docker image로 만들었어요. 컨테이너 실행 및 간단한 명령 수행 후 바로 사라지게 하고 싶은데 환경 변수가 제대로 안읽혔어요..;;

 

 

🐳 "docker run --rm" 을 사용하자

docker container를 잠깐 실행하고, 끝나면 자동으로 삭제되게 하는 깔끔한 명령과 옵션이에요

docker run --rm my-image ls​

이렇게 하면 ls 명령만 딱 실행 후 컨테이너가 사라지죠

 

 

❓근데 환경변수가 제대로 안나온다

Dockerfile 에서 분명 이렇게 환경 변수 설정 후 image를 생성했는데요

...
ENV MY_ENV=hello

 

아래와 같이 명령을 통해 출력하니 아무 값도 나오지 않았어요

docker run --rm my-image echo $MY_ENV

 

왜 그럴까요..??

 

 

🧠 문제의 원인: 해석 순서!

이 명령에서 $MY_ENV는 컨테이너 내부에서 해석되는 게 아니라, 호스트 쉘에서 먼저 해석돼버려요.

즉, Docker는 실제로 이렇게 실행한 거랑 똑같이 되어버립니다;;

docker run --rm my-image echo ""

 

그러니 아무 것도 안나오죠 😅

 

 

✅ 해결 방법: 내부에서 해석되게 만들기

컨테이너 안에서 $MY_ENV가 해석되게 하려면 "sh -c"를 써야 해요

docker run --rm my-image sh -c 'echo $MY_ENV'

 

이렇게 하면 'echo $MY_ENV' 전체가 문자 그대로 컨테이너에 전달되고,

컨테이너 안에서 $MY_ENV가 올바르게 출력됩니다

 

 

728x90