Demo of Docker env vars and build args
Here’s a demo Dockerfile using env vars and build args
# build with
# docker build --tag local/envvars --build-arg VAL1=asdf --build-arg VAL3=333 .
# run with
# docker run --rm -it -e VAL4=runtime local/envvars
FROM node:14.17
ARG VAL1 VAL3
ENV VAL2=blah
ENV VAL3=$VAL3
# VAL4 only provided at runtime
RUN echo "build time; val1=$VAL1; val2=$VAL2; val3=$VAL3; val4=$VAL4"
ENTRYPOINT ["bash", "-c", "echo runtime, val1=$VAL1, val2=$VAL2, val3=$VAL3, val4=$VAL4"]
When you build it, you can see build args and env vars are in context
...
Step 5/6 : RUN echo "build time; val1=$VAL1; val2=$VAL2; val3=$VAL3; val4=$VAL4"
---> Running in 7197d2318303
build time; val1=asdf; val2=blah; val3=333; val4=
...
Then, when you run it
$ docker run --rm -it -e VAL4=runtime local/envvars
runtime, val1=, val2=blah, val3=333, val4=runtime
…you can see build args (val1) are forgotten but env vars set during build are kept plus ones we set at runtime.
So you can set a default value during build, and then override it at runtime if you need.
Alternatively, you can write a bash script as the entrypoint which does an if
to set the
correct env var value based on whatever condition you need.