Согласно документации ENV
:
Переменные среды поддерживаются следующим списком
инструкции в Dockerfile:
ДОБАВИТЬ КОПИРОВАТЬ ENV EXPOSE ИЗ ПОЛЕ VOLUME WORKDIR ПОЛЬЗОВАТЕЛЯ STOPSIGNAL
как:
ONBUILD (в сочетании с одной из поддерживаемых инструкций выше)
Следовательно, переменные, определенные с ENV
, не поддерживаются директивой RUN
.
Однако вместо этого вы можете заменить директиву ENV
директивой ARG
, и NODE_VERSION
будет доступна в последующих директивах RUN
.
Пример:
FROM microsoft/nanoserver
ARG NODE_VERSION=8.11.4
ADD https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-win-x64.zip C:\\build\\node-v${NODE_VERSION}-win-x64.zip
RUN powershell -Command Expand-Archive C:\build\node-v${NODE_VERSION}-win-x64.zip C:\; Rename-Item C:\node-v${NODE_VERSION}-win-x64 node
RUN SETX PATH C:\node
ENTRYPOINT C:\node\node.exe
Кроме того, вы можете переопределить значение NODE_VERSION
в вашей команде docker build
.
$ docker build -t base-image:latest --build-arg NODE_VERSION=10.0.0 .
Использование директивы ARG
не сделает NODE_VERSION
доступным в среде работающего контейнера. В зависимости от вашего варианта использования вам также может понадобиться дополнительное определение ENV
.