도커 파일을 통해 도커 이미지를 구축하는 동안 cmd 라인을 통해 ENV 변수를 전달할 수 있습니까?
저는 도커 파일을 사용하여 centOs를 기반으로 도커 이미지를 구축하는 작업을 하고 있습니다.도커 파일 내부의 단계 중 하나는 프록시 뒤에서 작업하려면 http_proxy 및 https_proxy ENV 변수를 설정해야 합니다.
이 도커 파일은 프록시가 다른 여러 팀에서 사용되므로 각 팀에 대해 도커 파일을 편집하지 않아도 됩니다.대신 빌드 시간에 ENV 변수를 전달할 수 있는 솔루션을 찾고 있습니다. 예를 들어,
sudo docker build -e http_build=somevalue.
이것을 제공하는 옵션이 이미 있는지 모르겠습니다.내가 뭘 빼놓았나요?
다음을 사용하여 컨테이너를 제작할 수 있습니다.build arguments
(Docker 1.9+의 경우) 환경 변수처럼 작동합니다.
방법은 다음과 같습니다.
FROM php:7.0-fpm
ARG APP_ENV=local
ENV APP_ENV=${APP_ENV}
RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini
그런 다음 생산 컨테이너를 구축합니다.
docker build --build-arg APP_ENV=prod .
특정 문제의 경우:
FROM debian
ENV http_proxy=${http_proxy}
그런 다음 실행:
docker build --build-arg http_proxy=10.11.24.31 .
다음을 사용하여 컨테이너를 구축할 수 있습니다.docker-compose
이러한 빌드 인수는 파일에서 지정할 수 있지만 명령줄에서는 지정할 수 없습니다.그러나 환경 변수를 사용하는 파일에서 변수 대체를 사용할 수 있습니다.
그래서 저는 많은 사람들이 당신이 통과할 수 있다고 설명하기 때문에 시행착오를 통해 이것을 찾아내야 했습니다.ARG
->ENV
그러나 ARG가 정의되기 전이나 후에 매우 중요하기 때문에 항상 작동하는 것은 아닙니다.FROM
꼬리표를 달다
아래의 예는 이를 명확하게 설명해야 합니다.저의 주요 문제는 원래 제 ARGS가 모두 이전에 정의되었다는 것이었습니다.FROM
그것은 모든 결과를 초래했습니다.ENV
항상 정의되지 않습니다.
# ARGS PRIOR TO FROM TAG ARE AVAIL ONLY TO FROM for dynamic a FROM tag
ARG NODE_VERSION
FROM node:${NODE_VERSION}-alpine
# ARGS POST FROM can bond/link args to env to make the containers environment dynamic
ARG NPM_AUTH_TOKEN
ARG EMAIL
ARG NPM_REPO
ENV NPM_AUTH_TOKEN=${NPM_AUTH_TOKEN}
ENV EMAIL=${EMAIL}
ENV NPM_REPO=${NPM_REPO}
# for good measure, what do we really have
RUN echo NPM_AUTH_TOKEN: $NPM_AUTH_TOKEN && \
echo EMAIL: $EMAIL && \
echo NPM_REPO: $NPM_REPO && \
echo $HI_5
# remember to change HI_5 every build to break `docker build`'s cache if you want to debug the stdout
..... # rest of whatever you want RUN, CMD, ENTRYPOINT etc..
저도 같은 상황에 직면했습니다.
Sin30의 답변에 따르면 예쁜 해결책은 쉘을 사용하는 것입니다.
CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]
http_proxy 및 https_proxy의 경우와 같이 여러 빌드 인수를 설정하려면 다음과 같이 변경해야 합니다.
. 도커 파일
FROM centos:latest
# Define ARG after FROM to indicate values coming from build arguments are part of the build stage.
ARG http_proxy
ARG https_proxy
# Create the environment variables and assign the values from the build arguments.
ENV http_proxy=$http_proxy \
https_proxy=$https_proxy \
# Print the values.
RUN echo "http_proxy: $http_proxy"
RUN echo "https_proxy: $https_proxy"
. 실행 명령
sudo docker build \
--build-arg http_proxy=http://172.0.0.1 \
--build-arg https_proxy=https://10.20.30.2 \
.
언급URL : https://stackoverflow.com/questions/31198835/can-we-pass-env-variables-through-cmd-line-while-building-a-docker-image-through
'source' 카테고리의 다른 글
mysql 명령에서 bash에 선언된 변수를 가장 잘 사용하려면 어떻게 해야 합니까? (0) | 2023.08.13 |
---|---|
ASP.NET 이상한 컴파일 오류 (0) | 2023.08.13 |
VBA와 Net을 사용한 Excel 자동화의 장단점 (0) | 2023.08.13 |
ssl을 사용하는 Spring 5 WebClient (0) | 2023.08.13 |
Angular2에서 문자열 값을 구성 요소에 전달하는 방법 (0) | 2023.08.13 |