Как расширить аргументы в команде Docker RUN, используя Powershell? - PullRequest
1 голос
/ 21 марта 2019

У меня есть Dockerfile, который использует базовый образ Windows Nano Server и использует Powershell в качестве оболочки:

FROM microsoft/nanoserver
SHELL ["powershell"]

Теперь я хочу определить переменную (или передать ее через --build-arg) с помощью команды ARG, а затем использовать ее в команде RUN, но, похоже, я не могу заставить ее работать. Я пробовал:

ARG mydir=tmp
RUN mkdir %mydir%
RUN mkdir $mydir

Но ничего из этого не работает.

Как мне сказать docker / powershell для правильного расширения моей переменной?

1 Ответ

1 голос
/ 21 марта 2019

Аргументы, передаваемые команде 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, запись в обоих случаях одинакова.

...