During the build process, building a Dockerfile w/ a default build ARG
and ENV
outputs:
BUILD MYENV: 'THIS IS AN ENV VARIABLE' MYARG: 'THIS IS A BUILD ARGUMENT'
$ docker build --no-cache -t example .
Sending build context to Docker daemon 2.048 kB
Step 1/5 : FROM alpine
---> 88e169ea8f46
Step 2/5 : ENV MYENV "THIS IS AN ENV VARIABLE"
---> Running in c0adeeeb7a68
---> 763493b4b68f
Removing intermediate container c0adeeeb7a68
Step 3/5 : ARG MYARG="THIS IS A BUILD ARGUMENT"
---> Running in 4c48a5f5c796
---> 757fc76c5902
Removing intermediate container 4c48a5f5c796
Step 4/5 : RUN echo "BUILD MYENV: '$MYENV' MYARG: '$MYARG'"
---> Running in 9802a49fdf43
BUILD MYENV: 'THIS IS AN ENV VARIABLE' MYARG: 'THIS IS A BUILD ARGUMENT'
---> 12c21d5e94ff
Removing intermediate container 9802a49fdf43
Step 5/5 : CMD echo "RUN MYENV: '$MYENV' MYARG: '$MYARG'"
---> Running in 64bafa99ee21
---> 3a81c0c880b7
Removing intermediate container 64bafa99ee21
Successfully built 3a81c0c880b7
Build ARG
s can be overridden and appear in the environment:
$ docker build --build-arg MYARG="OVERRIDDEN BUILD ARG" --no-cache -t example .
Sending build context to Docker daemon 2.048 kB
Step 1/5 : FROM alpine
---> 88e169ea8f46
Step 2/5 : ENV MYENV "THIS IS AN ENV VARIABLE"
---> Running in effb24d964e6
---> c61052dabe8c
Removing intermediate container effb24d964e6
Step 3/5 : ARG MYARG="THIS IS A BUILD ARGUMENT"
---> Running in 91718ee98c3a
---> 0b5f8982c89d
Removing intermediate container 91718ee98c3a
Step 4/5 : RUN echo "BUILD MYENV: '$MYENV' MYARG: '$MYARG'"
---> Running in 111d8a443792
BUILD MYENV: 'THIS IS AN ENV VARIABLE' MYARG: 'OVERRIDDEN BUILD ARG'
---> 2d02795454d9
Removing intermediate container 111d8a443792
Step 5/5 : CMD echo "RUN MYENV: '$MYENV' MYARG: '$MYARG'"
---> Running in cac5859ee406
---> f08b6505cf49
Removing intermediate container cac5859ee406
Successfully built f08b6505cf49
ENV
vars cannot be overridden at build time:
$ docker build --env MYENV="This is an overridden build ENV" --no-cache -t example .
unknown flag: --env
See 'docker build --help'.
At runtime, ARG
s are not available, but the default ENV
is injected into the environment:
$ docker run --rm --name example example
RUN MYENV: 'THIS IS AN ENV VARIABLE' MYARG: ''
ENV
variables can be overridden at run time:
$ docker run --env MYENV="OVERRIDDEN ENV" --rm --name example example
RUN MYENV: 'OVERRIDDEN ENV' MYARG: ''