Передача аргумента в dockerfile не работает

У меня возникли проблемы с передачей значения аргумента в файл dockerfile.

Запуск докера в Windows Server 2016

Информация о моей версии докера

PS C:\Users\Administrator\Desktop> docker version
Client: Docker Engine - Enterprise
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9e27c76fe0
 Built:             10/17/2019 23:42:50
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Enterprise
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.24)
  Go version:       go1.12.10
  Git commit:       9e27c76fe0
  Built:            10/17/2019 23:41:23
  OS/Arch:          windows/amd64
  Experimental:     false

и powershell открылся как administrator.

Моя ссылка это.

Но у меня это не сработало.

Итак, это мой файл докеров.

FROM microsoft/iis

ARG a_version
RUN echo $a_version

Также я пробовал много разных типов эхо-значений, таких как

RUN echo "$a_version"
RUN echo ${a_version}
RUN echo "${a_version}"

И это моя команда на выполнение.

docker build . --build-arg a_version=1234

Моим ожидаемым результатом была печать 1234

Но фактический результат был

PS C:\Users\Administrator\Desktop> docker build . --build-arg a_version=1234
Sending build context to Docker daemon  14.04MB
Step 1/3 : FROM microsoft/iis
 ---> 595015675977
Step 2/3 : ARG a_version
 ---> Running in 91698d9e71da
Removing intermediate container 91698d9e71da
 ---> 2bad94a2ce74
Step 3/3 : RUN echo $a_version
 ---> Running in 3fe25ecb813c
$a_version

Почему это происходит? Как это исправить?

2 ответа

Решение

В командной строке Windows используется синтаксис echo %a_version% поскольку ваше базовое изображение основано на window.

как-можно-я-отображать-содержимое-переменной-среды-из-командной-подсказки

Так что вы можете изменить это на

FROM microsoft/iis
ARG a_version
RUN echo %a_version%

env в файле докеров окна

Мне пришлось сделать что-то подобное, и этот фрагмент кода у меня сработал.

      ARG PORT_SITE
ENV PORT_SITE ${PORT_SITE}

а затем я ссылаюсь на это в точке входа следующим образом

      $env:PORT_SITE

Я так и сделал, но я полагаю, что вы можете опустить переменную env и просто сослаться на значение arg, используя

      ${PORT_SITE}
Другие вопросы по тегам