ENV / ARG命令不在Dockerfile中填充变量

问题描述 投票:1回答:2

我正在尝试创建一个带有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.
docker dockerfile
2个回答
1
投票

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


0
投票

在这里找到答案:

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
© www.soinside.com 2019 - 2024. All rights reserved.