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의 프로세스 대체 를 사용하는 것입니다 .COPY
ADD
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
'Programing' 카테고리의 다른 글
두 조각이 같은지 확인 (0) | 2020.04.14 |
---|---|
C는 sin () 및 기타 수학 함수를 어떻게 계산합니까? (0) | 2020.04.14 |
ASP.NET MVC JsonResult 날짜 형식 (0) | 2020.04.14 |
CSS로 특정 텍스트를 선택할 수 없게 만드는 방법 (0) | 2020.04.14 |
게으른 발은 무엇을합니까? (0) | 2020.04.14 |