我正在尝试创建一个带有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/