我正在尝试创建一个带有nodejs基本镜像的nanoserver,但似乎无法使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.

最佳答案

根据ENV documentation:



因此,看来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定义。

关于docker - ENV/ARG命令未在Dockerfile中填充变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52121578/

10-16 09:27