Аргументы, передаваемые команде Powershell, выполняемой через RUN
, заменяются не Docker, а самим Powershell.Powershell обрабатывает их как обычные переменные среды, поэтому правильный синтаксис:
FROM microsoft/nanoserver
SHELL ["powershell"]
ARG mydir=tmp
RUN mkdir $env:mydir
Таким же образом вы также можете расширять переменные нормальной среды:
RUN mkdir $env:LOCALAPPDATA\$env:mydir
Обратите внимание, что этодопустимо только в контексте команды RUN
.При использовании других команд Docker переменные по-прежнему расширяются с использованием обычной записи:
COPY ./* $mydir
В Windows / Powershell это сбивает с толку, так как в контейнерах Linux, использующих оболочку bash
, запись в обоих случаях одинакова.