Docker

[Docker] 호스트 환경 변수 vs 컨테이너 환경 변수

LeeJaeJun 2025. 3. 23. 11:31
728x90
728x90

호스트 컴퓨터(내 PC나 서버) 설정된 환경 변수가 컨테이너 내부에도 자동으로 적용될까요?

결론은 "그렇지 않다" 입니다.

 

도커 컨테이너 내부는 별개의 환경이기 때문에, 호스트의 환경변수는 자동으로 컨테이너와 공유되지 않습니다.

 

1. 철저히 분리된 컨테이너 내부와 호스트

  • 도커 컨테이너는 호스트 운영체제의 커널을 공유하되, 네임스페이스와 cgroups 등을 통해 격리된 환경을 만듦
  • 따라서,
    • 컨테이너는 호스트 프로세스나 네트워크 설정을 직접 볼 수 없음
    • 환경 변수 역시 호스트와 별개로 관리
  • 즉, 호스트 컴퓨터에서 export MY_ENV=hello 같은 식으로 환경 변수를 설정해도, 컨테이너는 이를 알 수가 없음
  • 각 컨테이너가 가지고 있는 환경 변수는 도커가 직접 부여한 값들만 존재

예시)

호스트에서 환경변수를 다음과 같이 설정합니다. (리눅스 / 맥 기준)

export HOST_ENV_VAR="This is from the host"
echo $HOST_ENV_VAR
# 출력: This is from the host

이 상태에서 아무런 옵션 없이 도커 컨테이너를 실행하여 환경 변수를 출력합니다.

  • env 명령어는 현재 세션에 설정된 환경 변수를 모두 출력
  • 그런데 출력값을 살펴보면 HOST_ENV_VAR가 보이지 않음

즉, 호스트에서 설정한 환경 변수 컨테이너 공유되지 않는 것을 알 수 있음

 

2. 호스트 환경 변수와 공유되지 않는 이유

  • 도커가 제공하는 가장 중요한 장점 중 하나는 프로세스 수준의 격리
  • 만약 호스트의 모든 환경 변수가 컨테이너 내부로 자동으로 흘러들어간다면,
    • 특정 컨테이너가 호스트의 민감한 설정(예: API 키, DB 접속 정보 등)을 엿볼 수도 있음
    • 컨테이너 실행 시 환경 충돌이 일어날 수도 있음
  • 비유하자면, 
    • 호스트는 큰 건물
    • 컨테이너는 건물 안에 있는 완전히 격리된 작은 방
    • 호스트(건물)에서 무슨 일을 하고 있든지(어떤 환경 변수를 갖고 있든지), 그걸 자동으로 방(컨테이너)까지 전달하진 않음.
    • 꼭 필요한 정보만 정해진 방법(-e 등)으로 방 안에 들여놓을 수 있음.

따라서 도커는 명시적으로 설정한 변수만 컨테이너에 전달해주도록 설계됨. (보안과 일관성)

728x90
300x250