Команда ENV / ARG не заполняет переменные в Dockerfile - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь создать базовый образ nanoserver с / nodejs, но мне не удается заставить команду ARG (или ENV) работать должным образом.

Мой файл Docker:

FROM microsoft/nanoserver

ENV 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

Команда построения:

docker build . -t base-image:latest

Загружает zip-файл, но при попытке переименовать загруженный файл выдает ошибку:

Expand-Archive : The path 'C:\build\node-v-win-x64.zip' either does not exist
or is not a valid file system path.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Нашел ответ здесь:

https://github.com/docker/for-win/issues/542

По существу - в командах powershell должен использоваться формат% VARIABLE_NAME%:

FROM microsoft/nanoserver

ENV 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
0 голосов
/ 31 августа 2018

Согласно документации 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...