Как я могу определить переменные в Dockerfile
для образа Windows, чтобы они были доступны в последующих операторах RUN
?
Мой тест Dockerfile
выглядит так
FROM microsoft/windowsservercore
SHELL ["powershell", "-Command"]
ARG viaArg=value
ENV viaEnv="""value"""
RUN $viaShell=\"value\"
RUN echo """viaArg: $env:viaArg"""
RUN echo """viaEnv: $env:viaEnv"""
RUN echo """viaShell: $myusername"""
RUN echo """viaShell+env: $env:viaShell"""
при построении образа через
PS > docker build -t myImage .
только viaArg
и viaEnv
показывают (а) значение.
Первый пример здесь помещает несколько команд в одну строку, например
RUN $someVar=\"2.60.3\" ; echo $someVar
но наверняка должен быть другой путь.
Является ли использование пространства имен $env
единственным возможным способом?
Как во всем этом участвует setx
?
Примечание: я не пытаюсь передать переменные из командной строки, поэтому ARG
уже может быть использован неправильно. И я не хочу постоянно устанавливать переменные, они должны существовать только во время сборки, поэтому они мне не нужны в реестре.
Используемые версии
PS > docker -v
Docker version 17.12.0-ce, build c97c6d6
PS > [System.Environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
PS > (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
1607
ENV or ARG
, если вы хотите использовать его в своей среде, а не сохранять в реестре. В качестве последних команд вы можете удалить их в своем файле докеров, если это то, что вам нужно. - person Edwin   schedule 16.01.2018RUN
, казалось, что для этого нельзя использовать пространство имен$end:
, но @Edwin заявляет, что это единственная возможность. Вид связан с моим другим связанным вопросом. - person BNT   schedule 17.01.2018