Programing

Dockerfile에서 환경 변수 값 가져 오기

lottogame 2020. 4. 14. 08:22
반응형

Dockerfile에서 환경 변수 값 가져 오기


루비 앱용 컨테이너를 만들고 있습니다. 내 앱의 구성은 환경 변수 ( dotenv로 앱 내부에로드 )에 포함되어 있습니다.

이러한 구성 변수 중 하나는 앱의 공개 IP이며 내부적으로 링크를 만드는 데 사용됩니다. 컨테이너 내부 에서이 IP를 127.0.0.1로 가리키는 dnsmasq 항목을 추가해야하므로 컨테이너화되지 않은 것처럼 앱의 링크를 가져올 수 있습니다.

따라서 ENV컨테이너에 환경 변수를 전달하는 Dockerfile에을 설정하려고합니다 .

몇 가지 시도했습니다.

ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`

모든 것은 환경 변수 값 대신 "REQUEST_DOMAIN"문자열을 전달합니다. 호스트 시스템에서 컨테이너로 환경 변수 값을 전달하는 방법이 있습니까?


이 목적을 위해 Dockerfile 에서 ARG지시문사용해야합니다 .

ARG명령은 사용자가 --build-arg <varname>=<value>플래그를 사용하여 docker build 명령을 사용하여 빌드시 빌더에 전달할 수있는 변수를 정의합니다 .

따라서 Dockerfile 에는 다음 줄이 있습니다.

ARG request_domain

또는 기본값을 선호하는 경우 :

ARG request_domain=127.0.0.1

이제 Dockerfile 내에서이 변수를 참조 할 수 있습니다.

ENV request_domain=$request_domain

그런 다음 컨테이너를 다음과 같이 빌드합니다.

$ docker build --build-arg request_domain=mydomain Dockerfile


참고 1 :ARG Dockerfile에서를 참조 했지만에서 제외 하면 이미지가 빌드되지 않습니다 --build-arg.

참고 2 : 사용자가 Dockerfile에 정의되지 않은 빌드 인수를 지정하면 빌드가 경고를 출력합니다.

[경고] 하나 이상의 빌드 인수 [foo]가 사용되지 않았습니다.


그래서 당신은 할 수 있습니다 : cat Dockerfile | envsubst | docker build -t my-target -

그런 다음 다음과 같은 Dockerfile을 사용하십시오.

ENV MY_ENV_VAR $MY_ENV_VAR

특수 문자에 문제가있을 수 있지만 대부분의 경우 작동합니다.


또는 envsubst같은 명령을 사용 하지 않고 중간 파일을 사용하지 않고 사용 하는 대안 은 Bash의 프로세스 대체 를 사용하는 것입니다 .COPYADD

docker build -f <(envsubst < Dockerfile) -t my-target .

참고 : 원래 jonasfj의 답변에 의견을 추가하고 싶었지만 평판이 충분하지 않은 것 같습니다.


런타임에 작성한 파일에서 환경 변수를로드하십시오.

export MYVAR="my_var_outside"
cat > build/env.sh <<EOF
MYVAR=${MYVAR}
EOF

... 그리고 Dockerfile에서

ADD build /build
RUN /build/test.sh

여기서 test.sh는 env.sh에서 MYVAR을로드합니다.

#!/bin/bash
. /build/env.sh
echo $MYVAR > /tmp/testfile

Dockerfile에서 모든 환경 변수 ($ ExampleEnvVar)를 찾아 바꾸려면 다음과 같이하십시오.

envsubst < /path/to/Dockerfile | docker build -t myDockerImage . -f -


-e컨테이너에 환경 변수를 전달하기위한 키를 추가하십시오 . 예:

$ MYSQLHOSTIP=$(sudo docker inspect -format="{{ .NetworkSettings.IPAddress }}" $MYSQL_CONRAINER_ID)
$ sudo docker run -e DBIP=$MYSQLHOSTIP -i -t myimage /bin/bash

root@87f235949a13:/# echo $DBIP
172.17.0.2

참고 URL : https://stackoverflow.com/questions/19537645/get-environment-variable-value-in-dockerfile

반응형