我正在尝试创建一个带有nodejs基本图像的纳米服务器,但我似乎无法使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.
根据ENV
documentation:
Dockerfile中的以下指令列表支持环境变量:
添加复制ENV显示标签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
定义。
在这里找到答案:
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