도커 컨테이너에서 환경 변수 가져오기
도커 파일에 선언되지 않은 도커 컨테이너에서 환경 변수를 얻는 가장 간단한 방법은 무엇입니까?
예를 들어, 환경변수는 다음과 같이 설정되어 있습니다.docker exec container /bin/bash
세션?
할수있어docker exec container env | grep ENV_VAR
단, 저는 그냥 돌려주는 것을 원합니다.
사용해보았습니다.docker exec container echo "$ENV_VAR"
대체는 컨테이너 밖에서 이루어지는 것 같아서 컨테이너에서 env var를 얻는 것이 아니라 내 컴퓨터에서 env var를 가져옵니다.
감사해요.
모든 env 변수를 표시하려면:
docker exec container env
구입 방법:
docker exec container env | grep VARIABLE | cut -d'=' -f2
적절한 실행 방법echo "$ENV_VAR"
컨테이너 내에서 변수 치환이 발생하도록 컨테이너 내부에서 다음을 수행합니다.
docker exec <container_id> bash -c 'echo "$ENV_VAR"'
사용할 수 있습니다.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새로운 회선의 각 env var를 출력하고grep
예를 들어 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의 텍스트/템플릿 패키지 문서로 이동하십시오.
우리는 JSON과 거래하고 있고, 수용된 답변과 달리 컨테이너를 실행할 필요가 없습니다.
docker inspect <NAME|ID> | jq '.[] | .Config.Env'
출력 샘플
[
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.19.4",
"NJS_VERSION=0.4.4",
"PKG_RELEASE=1~buster"
]
특정 변수를 검색하려면
docker inspect <NAME|ID> | jq -r '.[].Config.Env[]|select(match("^<VAR_NAME>"))|.[index("=")+1:]'
'jq' 참조
위의 답변 중 비실행 컨테이너에서 변수를 추출하는 방법을 보여 주는 것은 없습니다.echo
으로 접근하다.run
출력은 표시되지 않습니다).
간단하게run
와 함께printenv
다음과 같은 경우:
docker run --rm <container> printenv <MY_VAR>
(주의:docker-compose
대신docker
동작합니다)
VSCode를 사용하여 도커 확장을 설치한 경우 확인하고 싶은 도커(도커 확장 내)에 +만 click있으면 검사 및 env 검색에서 모든 env 변수 값을 찾을 수 있습니다.
수정할 수 있습니다.entrypoint
비실행 컨테이너의docker run
명령어를 입력합니다.
show PATH 환경변수의 예:
를 사용합니다.
bash
★★★★★★★★★★★★★★★★★」echo
: 이 답변은 다음과 같습니다.echo
출력은 생성되지 않습니다.이것은 올바르지 않습니다.docker run --rm --entrypoint bash <container> -c 'echo "$PATH"'
를 사용합니다.
printenv
docker run --rm --entrypoint printenv <container> PATH
@aisbaa의 답변은 환경변수가 언제 선언되었는지 신경 쓰지 않으면 효과가 있습니다. 환경변수가 환경변수 에서 선언되어 있는 exec /bin/bash
과 같이 사용합니다.
IFS="=" read -a out <<< $(docker exec container /bin/bash -c "env | grep ENV_VAR" 2>&1)
별로 예쁘지는 않지만, 일을 잘 해냅니다.
그런 다음 값을 얻으려면 다음을 사용합니다.
echo ${out[1]}
이 명령어는 호스트의 도커 스택프로세스 환경을 검사합니다.
pidof dockerd containerd containerd-shim | tr ' ' '\n' \
| xargs -L1 -I{} -- sudo xargs -a '/proc/{}/environ' -L1 -0
첫 은 ENV 변수입니다.docker inspect <container name>
은 두 the번 the the the 。docker exec <4 alphanumeric letter of CONTAINER id> bash -c 'echo "$ENV_VAR"'
질문에 오해가 있어 혼동을 일으킵니다.
"실행 중인 세션"에 액세스할 수 없으므로 bash 세션은 아무것도 변경할 수 없습니다.
docker exec -ti container /bin/bash
내에서 에, 「」를하면,export VAR=VALUE
껍데기를 벗어나면 바로 사라지니까 더 이상 존재하지 않을 거야
예를 들어 다음과 같습니다.
# assuming TESTVAR did not existed previously this is empty
docker exec container env | grep TESTVAR
# -> TESTVAR=a new value!
docker exec container /bin/bash -c 'TESTVAR="a new value!" env' | grep TESTVAR
# again empty
docker exec container env | grep TESTVAR
음음 env
도커 파일 또는 명령어, 도커 자체 및 엔트리 포인트에서 설정된 모든 것을 통해 얻을 수 있습니다.
여기 있는 다른 답변들은 좋습니다.그러나 프로그램을 시작할 때 사용되는 환경 속성을 정말로 얻어야 할 경우,/proc/pid/environ
(여기서 '''는 '')pid
는 실행 중인 커맨드의 컨테이너 프로세스 ID 입니다.
# environmental props
docker exec container cat /proc/pid/environ | tr '\0' '\n'
# you can check this is the correct pid by checking the ran command
docker exec container cat /proc/pid/cmdline | tr '\0' ' '
언급URL : https://stackoverflow.com/questions/34051747/get-environment-variable-from-docker-container
'programing' 카테고리의 다른 글
ASP의 숨겨진 기능그물 (0) | 2023.04.24 |
---|---|
git 서브모듈의 리모트 저장소를 변경하는 방법 (0) | 2023.04.24 |
Eclipse 기본 설정으로 되돌리기 (0) | 2023.04.24 |
모든 앱 창의 WPF 아이콘 (0) | 2023.04.24 |
커밋되지 않은 로컬 변경을 다른 Git 브랜치에 병합하려면 어떻게 해야 합니까? (0) | 2023.04.19 |