Docker 파일에서 환경 변수 값 가져오기
루비 앱을 위한 컨테이너를 만들고 있습니다.내 앱의 구성은 환경 변수 내에 포함되어 있습니다(앱 내부에 dotenv와 함께 로드됨).
이러한 구성 변수 중 하나는 내부적으로 링크를 만드는 데 사용되는 앱의 공용 IP입니다.컨테이너 내부에서 127.0.0.1을 가리키는 dnsmasq 항목을 추가해야 앱의 링크를 컨테이너화되지 않은 것처럼 가져올 수 있습니다.
그러므로 나는 설정하려고 노력하고 있습니다.ENV
환경 변수를 컨테이너에 전달하는 도커 파일에 있습니다.
저는 몇 가지를 시도했습니다.
ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`
그러나 모든 항목은 환경 변수 값 대신 "REQUEST_DOMAIN" 문자열을 전달합니다.호스트 시스템에서 컨테이너로 환경 변수 값을 전달하는 방법이 있습니까?
이 목적을 위해 작성된 Docker 파일의 지침을 사용해야 합니다.
그
ARG
명령은 사용자가 빌드 시 도커 빌드 명령을 사용하여 빌드에 전달할 수 있는 변수를 정의합니다.--build-arg <varname>=<value>
깃발
Docker 파일의 행은 다음과 같습니다.
ARG request_domain
또는 기본값을 원하는 경우:
ARG request_domain=127.0.0.1
이제 도커 파일 내에서 이 변수를 참조할 수 있습니다.
ENV request_domain=$request_domain
그런 다음 컨테이너를 다음과 같이 구성합니다.
$ docker build --build-arg request_domain=mydomain Dockerfile
참고 1: 참조한 경우 이미지가 빌드되지 않습니다.ARG
도커 파일에 있지만 제외됨--build-arg
.
참고 2: 사용자가 Docker 파일에 정의되지 않은 빌드 인수를 지정하면 빌드는 다음과 같은 경고를 출력합니다.
[경고] 하나 이상의 빌드 인수 [foo]가 사용되지 않았습니다.
따라서 다음을 수행할 수 있습니다.cat Dockerfile | envsubst | docker build -t my-target -
그런 다음 다음과 같은 Docker 파일이 있습니다.
ENV MY_ENV_VAR $MY_ENV_VAR
일부 특수 문자에 문제가 있을 수 있지만, 적어도 대부분의 경우에는 효과가 있습니다.
이것은 도커에서 env 변수를 전달하려는 사람들을 위한 것입니다..env
빌드하는 동안 파일에서 도커 파일로 이동한 다음 이러한 인수를 env 변수로 컨테이너에 전달합니다.일반적인 도커 합성 파일
services:
web:
build:
context: ./api
dockerfile: Dockerfile
args:
- SECRET_KEY=$SECRET_KEY
- DATABASE_URL=$DATABASE_URL
- AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
에 있는 env 변수 전달.env
빌드 명령의 인수에 파일을 추가합니다.전형적인..env
파일
SECRET_KEY=blahblah
DATABASE_URL=dburl
이제 docker-compose up -d 명령을 실행하면 docker-compose 파일이 .env 파일에서 값을 가져온 다음 이 값을 docker-compose 파일로 전달합니다.이제 웹의 도커 파일에는 빌드하는 동안 인수를 통해 모든 변수가 포함되어 있습니다.웹의 전형적인 도커 파일입니다.
FROM python:3.6-alpine
ARG SECRET_KEY
ARG DATABASE_URL
ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_BUCKET
ARG AWS_REGION
ARG CLOUDFRONT_DOMAIN
ENV CELERY_BROKER_URL redis://redis:6379/0
ENV CELERY_RESULT_BACKEND redis://redis:6379/0
ENV C_FORCE_ROOT true
ENV SECRET_KEY ${SECRET_KEY?secretkeynotset}
ENV DATABASE_URL ${DATABASE_URL?envdberror}
이제 우리는 그 secret_key와 dburl을 doker 파일의 arg로 받았습니다. 이제 제사보겠다니습해에 있는 사용해 .ENV
~하듯이ENV SECRET_KEY ${SECRET_KEY?secretkeynotset}
도커 컨테이너도 환경에 이러한 변수가 있습니다.(제가 한) 사용하지 않는 것을 기억하세요. 그래야 합니다.
를 :envsubst
▁like않고와 같은 명령어를 할 수 않고,COPY
또는ADD
중간 파일을 사용하지 않으면 Bash의 프로세스 대체를 사용할 수 있습니다.
docker build -f <(envsubst < Dockerfile) -t my-target .
런타임에 생성한 파일에서 환경 변수를 로드합니다.
export MYVAR="my_var_outside"
cat > build/env.sh <<EOF
MYVAR=${MYVAR}
EOF
도커 파일에서.
ADD build /build
RUN /build/test.sh
어디서 테스트를 합니까?sh는 env.sh 에서 MYVAR를 로드합니다.
#!/bin/bash
. /build/env.sh
echo $MYVAR > /tmp/testfile
Docker 파일에서 모든 환경 변수($ExampleEnvVar)를 찾아 교체한 후 빌드하려는 경우 다음과 같이 작업할 수 있습니다.
envsubst < /path/to/Dockerfile | docker build -t myDockerImage . -f -
을 할 때build-arg
...
docker build --build-arg CODE_VERSION=1.2 Dockerfile
할 수 을 나타냅니다.이후에는 변수를 사용할 수 없음을 확인합니다.FROM
:
ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
안 안
ARG
에선 앞에 된.FROM
빌드 단계를 벗어났기 때문에 이후의 어떤 지침에도 사용할 수 없습니다.FROM
.
으로 반적으로.ARG
는 s 다 에 배 합야니다해치는 뒤에 .FROM
중에 필요하지 않은 경우에는FROM
:
FROM base:xy
ARG ABC=123
ARG
번째 첫번보다먼선된언저째FROM
을 사용합니다.ARG
빌드 단계 내부의 값이 없는 명령:
ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version
https://docs.docker.com/engine/reference/builder/ #설명 방법 및 출처 이해
컨테이너 시작 시 env 변수를 직접 전달할 수 있습니다.
docker run -e [your_variable_name = your_variable_value] [image to instanciate]
예:
docker run --rm -e TARGET=192.168.1.9 ubuntu env
출력은 다음과 같습니다.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=36399469e519
TARGET=192.168.1.9
HOME=/root
대상 변수가 현재 컨테이너의 환경 변수에 추가되었습니다!
더하다-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' 카테고리의 다른 글
SpringBoot 로깅 - 모든 로그 항목 시작 시 관련 없는 하이픈 사용 (0) | 2023.08.18 |
---|---|
사용자가 AJAX 요청이 끝나기 전에 브라우저를 종료하거나 페이지를 변경할 경우 발생하는 현상 (0) | 2023.08.18 |
Jquery $.ajax 상태코드 기타 (0) | 2023.08.18 |
SQL Grant on - 여러 사용자용 (0) | 2023.08.18 |
R: 인수가 여러 형식 인수와 일치합니다. (0) | 2023.08.18 |