source

도커 파일을 통해 도커 이미지를 구축하는 동안 cmd 라인을 통해 ENV 변수를 전달할 수 있습니까?

manysource 2023. 8. 13. 09:49

도커 파일을 통해 도커 이미지를 구축하는 동안 cmd 라인을 통해 ENV 변수를 전달할 수 있습니까?

저는 도커 파일을 사용하여 centOs를 기반으로 도커 이미지를 구축하는 작업을 하고 있습니다.도커 파일 내부의 단계 중 하나는 프록시 뒤에서 작업하려면 http_proxyhttps_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_proxyhttps_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