Dockerfile에서 변수를 정의하는 방법은 무엇입니까?


155

내에서 Dockerfile , 내가하고 싶은 변수 정의 내가 할 수있는 Dockerfile에서 나중에 사용합니다 .

ENV지시 사항을 알고 있지만 이러한 변수가 환경 변수가되기를 원하지 않습니다.

Dockerfile 범위에서 변수선언 하는 방법이 있습니까?


10
당신은 ARG를 사용할 수 있습니다 - 볼 docs.docker.com/engine/reference/builder/#arg
lumos0815

@ lumos0815, 나는 그것이 OP가 요구하는 것과 똑같이 (오래된 게시물이지만 후손을 위해) 대답으로 게시해야한다고 생각합니다.
shriek 2016 년

ARG는 dockerfile 내에서 사용할 수있는 var를 정의하지 않습니다. 원하는 것을 얻으려면 ENV 명령을 사용하여이를 짝짓어야합니다. ARG foo; ENV FOO = $ foo; COPY 파일 $ foo (잘못된 형식으로 인해 죄송합니다. 전화에서 코드 블록 및 다중 회선을 수행 할 수없는 것 같습니다)
ntwrkguru

답변:


111

사용할 수 있습니다-https ARG://docs.docker.com/engine/reference/builder/#arg 참조

ARG명령은 사용자가 플래그를 docker build사용하여 명령을 사용하여 빌드시 빌더에 전달할 수있는 변수를 정의합니다 --build-arg <varname>=<value>. 사용자가 Dockerfile에 정의되지 않은 빌드 인수를 지정하면 빌드가 오류를 출력합니다.


@MargachChris은 COPY 대한 변수를 사용할 수 있어야한다
lumos0815

COPY 명령에는 작동하지 않는 것 같습니다. docs.docker.com/engine/reference/builder/#arg
femibyte '

54

내 지식 ENV으로는 " 환경 교체 "에 언급 된 대로만 허용

ENV특정 명령에서 환경 변수 ( 문으로 선언 )를 Dockerfile에서 해석 할 변수로 사용할 수도 있습니다.

에 의해 Dockerfile의 각 줄에 대해 생성 된 각각의 새 컨테이너에서 다시 선언 되려면 환경 변수 여야합니다 docker build.

즉, 이러한 변수는 Dockerfile에서 직접 해석되지 않지만 Dockerfile 행을 위해 작성된 컨테이너에서 해석되므로 환경 변수를 사용합니다.


오늘은 ARG( docker 1.10+ 및docker build --build-arg var=value ) 와을 모두 사용합니다 ENV. 단독으로
사용 ARG한다는 것은 런타임이 아니라 빌드 타임에 변수를 볼 수 있음을 의미합니다 .

내 Dockerfile에는 일반적으로 다음이 있습니다.

ARG var
ENV var=${var}

귀하의 경우 ARG충분합니다 : 일반적으로 http_proxy 변수를 설정하는 데 사용합니다. 빌드 타임에 도커 빌드가 인터넷에 액세스해야합니다.


51

질문에 대답하려면 :

Dockerfile에서 나중에 Dockerfile에서 사용할 수있는 변수를 정의하고 싶습니다.

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

ARG myvalue=3

같은 문자 주위의 공백은 허용되지 않습니다.

나중에 사용하십시오.

RUN echo $myvalue > /test

13

변수가 동일한 RUN명령어 내에서 재사용되면 간단히 쉘 변수를 설정할 수 있습니다. 나는 그들이 공식 Ruby Dockerfile으로 어떻게 접근했는지를 정말로 좋아한다 .


좋은 대답입니다. 가능하면 ARG를 사용해야하지만 때로는 동적 변수를 할당하고 재사용해야합니다. 예 :RUN foo=$(date) && echo $foo
wisbucky

3

ARG variable defaultValuerun 명령을 사용 하고 사용 하여이 값을 업데이트 할 수도 있습니다 --build-arg variable=value. docker 파일에서 이러한 변수를 사용하려면 다음과 같이 참조하십시오$variable run 명령 .

참고 : 이러한 변수는 Linux 명령에서 사용할 수 RUN echo $variable있으며 이미지에서 유지되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.