program story

Docker 컨테이너에서 환경 변수 가져 오기

inputbox 2020. 8. 31. 07:43
반응형

Docker 컨테이너에서 환경 변수 가져 오기


Dockerfile에 선언되지 않은 Docker 컨테이너에서 환경 변수를 가져 오는 가장 간단한 방법은 무엇입니까 ?

예를 들어, 일부 docker exec container /bin/bash세션을 통해 설정된 환경 변수 ?

할 수 docker exec container env | grep ENV_VAR있지만 값을 반환하는 것을 선호합니다.

을 사용해 보았지만 docker exec container echo "$ENV_VAR"대체가 컨테이너 외부에서 발생하는 것처럼 보이므로 컨테이너에서 env var를 가져 오지 않고 내 컴퓨터에서 env var를 가져옵니다.

감사.


echo "$ENV_VAR"컨테이너에서 변수 대체가 발생하도록 컨테이너 내부에서 실행하는 적절한 방법 은 다음과 같습니다.

docker exec container bash -c 'echo "$ENV_VAR"'

모든 환경 변수를 보려면 :

docker exec container env

하나를 얻으려면 :

docker exec container env | grep VARIABLE | cut -d'=' -f2

printenv VARIABLE대신 사용할 수 있습니다 /bin/bash -c 'echo $VARIABLE. 훨씬 간단하고 대체를 수행하지 않습니다.

docker exec container printenv VARIABLE

사용의 단점은 실행중인 컨테이너 docker exec가 필요 하므로 컨테이너가 실행 중인지 확실하지 않은 경우 유용 할 수 있습니다.docker inspect -f

예 # 1. 지정된 컨테이너에서 공백으로 구분 된 환경 변수 목록을 출력합니다.

docker inspect -f \
   '{{range $index, $value := .Config.Env}}{{$value}} {{end}}' container_name

출력은 다음과 같습니다.

ENV_VAR1=value1 ENV_VAR2=value2 ENV_VAR3=value3

예제 # 2. 새 행과 grep필요한 항목 에 각 env var를 출력 합니다. 예를 들어 mysql 컨테이너의 설정은 다음과 같이 검색 할 수 있습니다.

docker inspect -f \
    '{{range $index, $value := .Config.Env}}{{println $value}}{{end}}' \
    container_name | grep MYSQL_

다음을 출력합니다.

MYSQL_PASSWORD=secret
MYSQL_ROOT_PASSWORD=supersecret
MYSQL_USER=demo
MYSQL_DATABASE=demodb
MYSQL_MAJOR=5.5
MYSQL_VERSION=5.5.52

예제 # 3. 위의 예를 수정 하여 스크립트에서 직접 사용할 수 있는 bash 친화적 인 출력 을 얻습니다 .

docker inspect -f \
   '{{range $index, $value := .Config.Env}}export {{$value}}{{println}}{{end}}' \
   container_name | grep MYSQL

다음을 출력합니다.

export MYSQL_PASSWORD=secret
export MYSQL_ROOT_PASSWORD=supersecret
export MYSQL_USER=demo
export MYSQL_DATABASE=demodb
export MYSQL_MAJOR=5.5
export MYSQL_VERSION=5.5.52

If you want to dive deeper, then go to Go’s text/template package documentation with all the details of the format.


None of the above answers show you how to extract a variable from a non-running container (if you use the echo approach with run, you won't get any output).

Simply run with printenv, like so:

docker run --rm <container> printenv <MY_VAR>

(Note that docker-compose instead of docker works too)


@aisbaa's answer works if you don't care when the environment variable was declared. If you want the environment variable, even if it has been declared inside of an exec /bin/bash session, use something like:

IFS="=" read -a out <<< $(docker exec container /bin/bash -c "env | grep ENV_VAR" 2>&1)

It's not very pretty, but it gets the job done.

To then get the value, use:

echo ${out[1]}

This command inspects docker stack processes' environment in the host :

pidof   dockerd containerd containerd-shim | tr ' ' '\n' \
      | xargs -L1 -I{} -- sudo xargs -a '/proc/{}/environ' -L1 -0

참고URL : https://stackoverflow.com/questions/34051747/get-environment-variable-from-docker-container

반응형