Search code examples
dockerdockerfile

ARG substitution in RUN command not working for Dockerfile


In my Dockerfile I have the following:

ARG a-version
RUN wget -q -O /tmp/alle.tar.gz http://someserver/server/$a-version/a-server-$a-version.tar.gz && \
    mkdir /opt/apps/$a-version

However when building this with:

--build-arg http_proxy=http://myproxy","--build-arg a-version=a","--build-arg b-version=b"

Step 10/15 : RUN wget... is shown with $a-version in the path instead of the substituted value and the build fails.

I have followed the instructions shown here but must be missing something else.

My questions is, what could be causing this issue and how can i solve it?


Solution

  • Don't use - in variable names.

    Docker build will always show you the line as is written down in the Dockerfile, despite the variable value.

    So use this variable name a_version:

    ARG a_version
    

    See this example:

    Dockerfile:

    FROM alpine
    
    ARG a_version
    RUN echo $a_version
    

    Build:

    $ docker build . --build-arg a_version=1234
    Sending build context to Docker daemon 2.048 kB
    Step 1/3 : FROM alpine
     ---> a41a7446062d
    Step 2/3 : ARG a_version
     ---> Running in c55e98cab494
     ---> 53dedab7de75
    Removing intermediate container c55e98cab494
    Step 3/3 : RUN echo $a_version                <<< note this <<
     ---> Running in 56b8aeddf77b
    1234                                          <<<< and this <<
     ---> 89badadc1ccf
    Removing intermediate container 56b8aeddf77b
    Successfully built 89badadc1ccf