docker - 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.
解决方案
根据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
定义。
推荐阅读
- ios - 如何在 SwiftUI 中使用 URLSession 请求后呈现视图?
- sublimetext3 - 使用 Sublime Text 查找/替换向输入标签添加属性
- azure - 尝试向用户添加架构扩展时权限不足
- java - 如何解析字符串二十一点游戏结果
- python-3.x - 随机显示列表中的图像
- javascript - 函数的并行执行 | 不需要异步等待,因为不需要等待
- python - 使用 python pandas 找到两列之间的相关方程
- java - 代码错误“org.openqa.selenium.remote.DriverCommand.NEW_SESSION”
- c - 导出 C 中的任意符号
- object-detection - ml kit对象检测api模板匹配