이 명령을 결합하고 싶다고 가정 해 보겠습니다.
RUN command_1
ENV FOO bar
RUN command_2
으로
RUN command_1 && export FOO=bar && command_2
변수를 RUN export
vs 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
너는 볼 수있어:
FOO
ENV
키워드 덕분에 중간 컨테이너를 통해 지속됩니다 .BAR
export
명령 때문에 다음 단계에서 지속되지 않습니다 .BAZ
변수가 동일한 컨테이너에서 사용되기 때문에이 올바르게 표시됩니다.