도커 ENV 대 RUN 내보내기


91

이 명령을 결합하고 싶다고 가정 해 보겠습니다.

RUN command_1
ENV FOO bar
RUN command_2

으로

RUN command_1 && export FOO=bar && command_2

변수를 RUN exportvs ENV로 설정하는 것이 동일한 지 궁금합니다 .

즉, Dockerfile에서 이러한 명령간에 차이점이 있습니까?

ENV FOO bar

vs

RUN export FOO=bar

답변:


148

에 의해 도시 된 바와 같이 문제 684 , export이미지 지속되지 않습니다. (각 Dockerfile 지시문은 중간 이미지에 커밋 된 중간 컨테이너를 생성합니다. 해당 이미지는 내 보낸 값을 유지하지 않습니다
ENV.)

을 사용하여 설정된 환경 변수 ENV는 결과 이미지에서 컨테이너가 실행될 때 유지됩니다.
을 사용하여 값을 docker inspect보고를 사용하여 변경할 수 있습니다 docker run --env <key>=<value>.

문제는 다음과 같이 설명하고 있습니다.

RUN export PATH=$PATH:/foo/bar # from directly in builder

내가 할 경우 docker run [img] bash -c 'echo $PATH'는 포함되지 않습니다 /foo/bar.

시도 해봐

다음을 포함하는 새 dockerfile을 만듭니다.

FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"

그런 다음 빌드하십시오. 마지막 단계의 출력은 다음과 같습니다.

Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
 ---> Running in eb66196b238d
foofoo  bazbaz

너는 볼 수있어:

  • FOOENV키워드 덕분에 중간 컨테이너를 통해 지속됩니다 .
  • BARexport명령 때문에 다음 단계에서 지속되지 않습니다 .
  • BAZ 변수가 동일한 컨테이너에서 사용되기 때문에이 올바르게 표시됩니다.

(나는 네 생각 만 :)합니까 그것은 그 의미 dockerrun와를 --env-file하거나 --env(변수)이 옵션 인수로 사람들을 내 보냅니다? 그런 오래된 답변에 부딪쳐서 미안하지만 웹 검색이 방금 나에게 가져 왔습니다. 좋은 대답 btw.
hakre

@hakre 예, 환경에 추가 됩니다. stackoverflow.com/a/49872152/6309 이하를 참조 하세요.
VonC

빠른 답장을 보내 주셔서 감사하지만 해당 답변에는 변수가 내보내기로 표시되어 있지 않습니다. 적어도 나에게는 아닙니다. 어쨌든, 여기서 내 자신의 숙제를해야합니다 . 예 : superuser.com/q/450868/63279 또는 pubs.opengroup.org/onlinepubs/9699919799/utilities/… .
hakre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.