programing

도커 파일에서 변수를 정의하는 방법은?

yellowcard 2023. 9. 7. 21:39
반응형

도커 파일에서 변수를 정의하는 방법은?

제 도커 파일에서는 나중에 도커 파일에서 사용할 수 있는 변수를 정의하고자 합니다.

나는 그것을 알고 있습니다.ENV수업, 하지만 나는 이 변수들이 환경 변수가 되는 것을 원하지 않습니다.

도커 파일 범위에서 변수를 선언하는 방법이 있습니까?

사용가능ARG- https://docs.docker.com/engine/reference/builder/ #http:////tvs 참조

ARG명령어는 빌드 타임에 사용자가 빌더에 전달할 수 있는 변수를 정의합니다.docker build명령어를 사용합니다.--build-arg <varname>=<value>flag. 사용자가 도커 파일에 정의되지 않은 빌드 인수를 지정하면 빌드에서 오류가 출력됩니다.

빌드 시간 동안 카피(예: 특정 폴더와 같은 태그별 컨텐츠 복사)에 유용할 수 있습니다. 예:

ARG MODEL_TO_COPY
COPY application ./application
COPY $MODEL_TO_COPY ./application/$MODEL_TO_COPY

컨테이너를 작성하는 동안:

docker build --build-arg MODEL_TO_COPY=model_name -t <container>:<model_name specific tag> .

질문에 대답하기

제 도커 파일에서는 나중에 도커 파일에서 사용할 수 있는 변수를 정의하고자 합니다.

다음을 사용하여 변수를 정의할 수 있습니다.

ARG myvalue=3

동일한 문자 주변에는 공백을 사용할 수 없습니다.

그리고 나중에 다음과 함께 사용합니다.

RUN echo $myvalue > /test

내가 아는 한, 오직ENV"환경 교체"에서 언급한 바와 같이 이를 허용합니다.

환경 변수(와 함께 선언됨)ENVstatement)는 특정 명령어에서 도커 파일에 의해 해석될 변수로 사용될 수도 있습니다.

도커 파일의 각 행에 대해 작성된 각 새 컨테이너에서 다음과 같이 재선언하려면 환경 변수여야 합니다.docker build.

즉, 이러한 변수는 도커 파일에서 직접 해석되는 것이 아니라 도커 파일 행을 위해 작성된 컨테이너에서 해석되므로 환경 변수가 사용됩니다.


오늘은 (docker 1.10+, 및 )과 를 모두 사용합니다.
사용.ARGalone은 런타임이 아닌 빌드 시에 변수가 표시됨을 의미합니다.

내 도커 파일은 일반적으로 다음과 같습니다.

ARG var
ENV var=${var}

당신 같은 경우엔ARG충분합니다:나는 일반적으로 http_proxy 변수를 설정할 때 사용하는데, 그 도커 빌드는 빌드할 때 인터넷에 접속할 필요가 있습니다.


크리스토퍼 킹은 논평에서 다음과 같이 덧붙입니다.

조심해!
ARG변수는 "사용되는 단계"에만 적용되며 각 단계에 대해 다시 선언해야 합니다.

는 도커 파일/범위를 가리키고 있습니다.

ARG변수 정의는 명령줄이나 다른 곳에서 인수를 사용하지 않고 도커 파일에 정의된 줄에서 적용됩니다.

예를 들어 다음과 같은 도커 파일을 생각해 보겠습니다.

FROM busybox
USER ${user:-some_user}
ARG user
USER $user
# ...

사용자는 다음을 호출하여 이 파일을 작성합니다.

docker build --build-arg user=what_user .

USER2호선에서 다음과 같이 평가합니다.some_user사용자 변수가 후속 라인 3에 정의되어 있기 때문입니다.
USER4호선에서 다음과 같이 평가합니다.what_user사용자 정의에 따라 그리고what_user명령줄에 값이 전달되었습니다.
해기에에n에 의해 되기 전에ARG명령어, 변수를 사용하면 빈 문자열이 됩니다.

ARG명령은 정의된 빌드 단계의 끝에서 범위를 벗어납니다.
를 여러 하려면 각 를 포함해야 합니다.ARG설명.

한 Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ,RUN명령어는 단순히 셸 변수를 설정할 수 있습니다.루비 도커 공식 파일로 접근한 모습이 정말 마음에 듭니다.

을 사용할 수 .ARG variable defaultValue 중 run는안이을여할다도n다gesdenu할n을dgen는여안--build-arg variable=value하려면 . 를 에 하려면 과 할 할 를 .$variable실행 명령으로

참고: 이 변수들은 다음과 같은 Linux 명령에 사용할 수 있습니다.RUN echo $variable그리고 그들은 그 이미지를 고집하지 않을 것입니다.

파티에 늦었지만 환경 변수를 노출하고 싶지 않다면 다음과 같은 작업을 수행하는 것이 더 쉬운 것 같습니다.

RUN echo 1 > /tmp/__var_1
RUN echo `cat /tmp/__var_1`
RUN rm -f /tmp/__var_1

aws 코드 아티팩트에서 개인 npm 패키지를 호스팅하기 때문에 결국 하게 되었습니다.

RUN aws codeartifact get-authorization-token --output text > /tmp/codeartifact.token
RUN npm config set //company-123456.d.codeartifact.us-east-2.amazonaws.com/npm/internal/:_authToken=`cat /tmp/codeartifact.token`
RUN rm -f /tmp/codeartifact.token

그리고 여기.ARG일을 할 수 없고 사용하고 싶지 않습니다.ENV을 다른 것에 입니다.른떤도고다기지이다기e지고i을so른n도이no .

언급URL : https://stackoverflow.com/questions/33935807/how-to-define-a-variable-in-a-dockerfile

반응형