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
'program story' 카테고리의 다른 글
모달에 매개 변수를 전달하는 방법은 무엇입니까? (0) | 2020.08.31 |
---|---|
자리 표시 자에 글꼴 굉장 아이콘 사용 (0) | 2020.08.31 |
mysql에서 한 번에 여러 테이블 삭제 (0) | 2020.08.30 |
Rails Console : 재 장전! (0) | 2020.08.30 |
Node.js에있는 다른 파일의 JavaScript 클래스 정의 포함 (0) | 2020.08.30 |