Search code examples
dockerdockerfiledocker-for-windows

How to use the ARG instruction of Dockerfile for Windows image


I would like to pass an argument in my dockerfile to build my docker image. I've seen in other post and docker manual how to do this but it doesn't work in my case. Here is an extract of my code where i use my argument:

ARG FirefoxVersion
RUN powershell -Command iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));
RUN choco install -y firefox --version $FirefoxVersion --ignore-checksums

I build my image with this command in powershellPrompt :

docker build -t myimage --build-arg FirefoxVersion=61.0.1 .

Finally I have this error :

 '$FirefoxVersion' is not a valid version string.
 Parameter name: version
 The command 'cmd /S /C choco install -y firefox --version $FirefoxVersion  -- ignore-checksums' returned a non-zero code: 1

Is someone know what is wrong with my code? Thanks.


Solution

  • (This answer is the formalized version of my comment.)

    Try to use %FirefoxVersion%

    ARG FirefoxVersion
    RUN powershell -Command iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));
    RUN choco install -y firefox --version %FirefoxVersion% --ignore-checksums
    

    Reason:

    The error message "The command 'cmd /S /C choco install ...' returned a non-zero code: 1" indicates that the choco install command is executed on cmd.exe (Windows' Command Prompt). Dockerfile's ARG value can be treated as an environment variable. On cmd.exe, %...% stands for env var.