[docker] 도커 ENV 대 RUN 내보내기

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

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



답변

에 의해 도시 된 바와 같이 문제 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 변수가 동일한 컨테이너에서 사용되기 때문에이 올바르게 표시됩니다.


답변