docker ENV vs RUN export

前端 未结 1 806
旧时难觅i
旧时难觅i 2020-11-27 02:51

Let\'s say I want combine these commands

RUN command_1
ENV FOO bar
RUN command_2

into

RUN command_1 && export FOO=b         


        
相关标签:
1条回答
  • 2020-11-27 03:00

    As illustrated by issue 684, export won't persist across images. (Don't forget that each Dockerfile directive will generate an intermediate container, committed into an intermediate image: that image won't preserve the exported value)
    ENV will:

    The environment variables set using ENV will persist when a container is run from the resulting image.
    You can view the values using docker inspect, and change them using docker run --env <key>=<value>.

    The issue was illustrating that with:

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

    When I do docker run [img] bash -c 'echo $PATH' it never includes /foo/bar.

    Try it

    Create a new dockerfile containing:

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

    Then build it. The output of the last step is:

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

    You can see:

    • FOO persists through intermediate containers, thanks to the ENV keyword;
    • BAR doesn't persist on the next step, because of the export command;
    • BAZ is correctly displayed because the variable is used on the same container.
    0 讨论(0)
提交回复
热议问题