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

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

예를 들어, 일부 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_id> 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

더 자세히 알아 보려면 형식의 모든 세부 정보가 포함 된 Go의 텍스트 / 템플릿 패키지 문서 로 이동 하세요.


답변

위의 답변 중 어느 것도 실행되지 않는 컨테이너에서 변수를 추출하는 방법을 보여주지 않습니다 ( echorun 않습니다 ( 와 함께 접근 방식 출력을 얻지 못함).

간단히을 run사용 printenv하면 다음과 같이됩니다.

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

( 작업 docker-compose대신에도 유의하십시오 docker)


답변

혹시 당신이 사용하는 경우 VSCode를 하고 설치 한 고정 표시기 확장을 , 단지 right+ click당신이합니다 (내 검사 할 고정 표시기에 고정 표시기 확장 ) click검사 하고, 거기 검색 ENV , 당신은 모든 찾을 수 ENV 변수의 값을


답변

@aisbaa의 대답은 환경 변수가 선언 된시기를 신경 쓰지 않으면 작동합니다. 환경 변수를 원하면 exec /bin/bash세션 내에서 선언 되었더라도 다음과 같이 사용하십시오.

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

그다지 예쁘지는 않지만 작업이 완료됩니다.

그런 다음 값을 얻으려면 다음을 사용하십시오.

echo ${out[1]}