I have a simple Dockerfile that looks like this:
FROM alpine:3
RUN echo "$HOME" # Prints '/root'
ENV OTHER_HOME="$HOME"
RUN echo "$OTHER_HOME" # Prints nothing!
RUN echo "$PATH" # Prints '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
ENV OTHER_PATH="$PATH"
RUN echo "$OTHER_PATH" # Prints '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
Which I build like this:
docker build . --no-cache
The output is perplexing. $OTHER_PATH prints as expected, but $OTHER_HOME is blank. Can anyone explain this behavior?
% docker build . --no-cache
Sending build context to Docker daemon 335.4kB
Step 1/7 : FROM alpine:3 AS build-stage
---> e7d92cdc71fe
Step 2/7 : RUN echo "$HOME"
---> Running in f9cd2769cd78
/root
Removing intermediate container f9cd2769cd78
---> d13f007a1fdf
Step 3/7 : ENV OTHER_HOME="$HOME"
---> Running in 7493ca43f9f3
Removing intermediate container 7493ca43f9f3
---> 2d6acfe45228
Step 4/7 : RUN echo "$OTHER_HOME"
---> Running in fb960138f43e
Removing intermediate container fb960138f43e
---> caa9719aeee5
Step 5/7 : RUN echo "$PATH"
---> Running in fe1eacf50d30
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Removing intermediate container fe1eacf50d30
---> 17267879b82e
Step 6/7 : ENV OTHER_PATH="$PATH"
---> Running in 9dd894199ea4
Removing intermediate container 9dd894199ea4
---> fa43f399604f
Step 7/7 : RUN echo "$OTHER_PATH"
---> Running in 89d67d8b6cfe
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Removing intermediate container 89d67d8b6cfe
---> 440133fc0052
Successfully built 440133fc0052
UPDATE: Stranger still, if I manually assign $HOME, the value is usable later!
FROM alpine:3
ENV HOME='/root'
RUN echo "$HOME"
ENV OTHER_HOME="$HOME"
RUN echo "$OTHER_HOME"
This Dockerfile results in:
% docker build . --no-cache
Sending build context to Docker daemon 335.4kB
Step 1/8 : FROM alpine:3 AS build-stage
---> e7d92cdc71fe
Step 2/8 : ENV HOME='/root'
---> Running in 4cb8a8e45b18
Removing intermediate container 4cb8a8e45b18
---> 40d0156fe68b
Step 3/8 : RUN echo "$HOME"
---> Running in 051cf7d138fb
/root
Removing intermediate container 051cf7d138fb
---> dc34c6859bcd
Step 4/8 : ENV OTHER_HOME="$HOME"
---> Running in 01dcc2788761
Removing intermediate container 01dcc2788761
---> 540ca4e9225a
Step 5/8 : RUN echo "$OTHER_HOME"
---> Running in 4e0d31d1f847
/root