[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의 텍스트 / 템플릿 패키지 문서 로 이동 하세요.
답변
위의 답변 중 어느 것도 실행되지 않는 컨테이너에서 변수를 추출하는 방법을 보여주지 않습니다 ( echo
run
않습니다 ( 와 함께 접근 방식 출력을 얻지 못함).
간단히을 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]}