Как использовать инструкцию ARG для образа Dockerfile для Windows - PullRequest
0 голосов
/ 12 ноября 2018

Я хотел бы передать аргумент в моем dockerfile для создания моего образа docker.Я видел в другом посте и руководстве по докеру, как это сделать, но в моем случае это не работает.Вот фрагмент моего кода, где я использую свой аргумент:

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

Я создаю свой образ с помощью этой команды в powershellPrompt:

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

Наконец, у меня есть эта ошибка:

 '$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

Кто-нибудь знает, что не так с моим кодом?Благодаря.

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

(Этот ответ является формализованной версией моего комментария .)

Попробуйте использовать % 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

Причина:

Сообщение об ошибке "Команда 'cmd / S / C choco install ...' вернула ненулевой код: 1" указывает, что команда choco install выполнена на cmd.exe (командная строка Windows).Значение ARG в Dockerfile можно рассматривать как переменную окружения.На cmd.exe %...% означает env var.

0 голосов
/ 27 июня 2019

Как подсказал @ matt9

Использование $env:FirefoxVersion в powershell

Использовать %FirefoxVersion% в cmd.exe

FROM microsoft/windowsservercore:ltsc2016
ARG FirefoxVersion
#if using powershell
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
RUN Write-Host Powershell: $env:FirefoxVersion
#if using CMD
SHELL ["cmd", "/S", "/C"]
RUN echo cmd.exe: %FirefoxVersion%

Сборка: docker build -t myimage --build-arg FirefoxVersion=61.0.1 .

Результат

Powershell: 61.0.1
cmd.exe: 61.0.1
0 голосов
/ 12 ноября 2018

Попробуй так:

Передавайте аргументы, такие как $ {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

сборка образа докера:

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