首页 > 解决方案 > ENV/ARG 命令未在 Dockerfile 中填充变量

问题描述

我正在尝试创建一个带有 nodejs 基础映像的 nanoserver,但我似乎无法让 ARG(或 ENV)命令正常工作。

我的码头文件:

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.

标签: dockerdockerfile

解决方案


根据ENV 文档

Dockerfile 中的以下指令列表支持环境变量:

从 LABEL STOPSIGNAL USER VOLUME WORKDIR 添加 COPY ENV EXPOSE 以及:

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定义。


推荐阅读