In places where key-value pairs are used, a space before the equal sign may lead to unintended behavior.
Why is this an issue?
A few Docker instructions (like ARG
, ENV
, LABEL
) may contain key-value pairs in form of
<key>=<value>
. The equal sign should not be followed by a space. The space before the equal sign may lead to unintended
behavior. This is critical, especially for multiple key-value pairs, e.g. key1 = value1 key2 = value2
, will lead to the key
key1
with the value = value1 key2 = value2
. In most cases it is unintended.
How to fix it
Code examples
Noncompliant code example
ENV BUILD_NUMBER =1
RUN echo $BUILD_NUMBER
This will lead to print =1
, which is not expected.
Compliant solution
ENV BUILD_NUMBER=1
RUN echo $BUILD_NUMBER
This will lead to print 1
, which is expected.
Noncompliant code example
ENV USER = bob MODE = all
RUN echo $USER
This will lead to print = bob MODE = all
, which is not expected.
Compliant solution
ENV USER=bob MODE=all
RUN echo $USER
This will lead to print bob
, which is expected.
How does this work?
The ENV
instruction allows alternative syntax ENV <key> <value>
and in case of space before equal sign, the
=1
is evaluated as value. The LABEL
instruction will be also evaluated to =1
. The ARG
instruction
will cause the build error.
Resources
Documentation