도커 파일에서 변수를 정의하는 방법은?
제 도커 파일에서는 나중에 도커 파일에서 사용할 수 있는 변수를 정의하고자 합니다.
나는 그것을 알고 있습니다.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
"환경 교체"에서 언급한 바와 같이 이를 허용합니다.
환경 변수(와 함께 선언됨)
ENV
statement)는 특정 명령어에서 도커 파일에 의해 해석될 변수로 사용될 수도 있습니다.
도커 파일의 각 행에 대해 작성된 각 새 컨테이너에서 다음과 같이 재선언하려면 환경 변수여야 합니다.docker build
.
즉, 이러한 변수는 도커 파일에서 직접 해석되는 것이 아니라 도커 파일 행을 위해 작성된 컨테이너에서 해석되므로 환경 변수가 사용됩니다.
오늘은 (docker 1.10+, 및 )과 를 모두 사용합니다.
사용.ARG
alone은 런타임이 아닌 빌드 시에 변수가 표시됨을 의미합니다.
내 도커 파일은 일반적으로 다음과 같습니다.
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 .
USER
2호선에서 다음과 같이 평가합니다.some_user
사용자 변수가 후속 라인 3에 정의되어 있기 때문입니다.USER
4호선에서 다음과 같이 평가합니다.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
'programing' 카테고리의 다른 글
의 크기가 피연산자 배열의 크기를 어떻게 알 수 있습니까? (0) | 2023.09.12 |
---|---|
MariaDB MySQL 최적화 (0) | 2023.09.07 |
jQuery UI 없이 자동 완성 (0) | 2023.09.07 |
에 깃 커밋 해시를 포함합니다.NET dll (0) | 2023.09.07 |
Angular2 QuickStart npm 시작이 올바르게 작동하지 않음 (0) | 2023.09.07 |