programing

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

lovejava 2023. 4. 24. 21:03

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

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

예를 들어, 환경변수는 다음과 같이 설정되어 있습니다.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 환경변수의 예:

  1. 를 사용합니다.bash ★★★★★★★★★★★★★★★★★」echo: 이 답변은 다음과 같습니다.echo출력은 생성되지 않습니다.이것은 올바르지 않습니다.

    docker run --rm --entrypoint bash <container> -c 'echo "$PATH"'
    
  2. 를 사용합니다.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