构建一个 Docker 图像,安装了配置版本的节点包
Building a Docker image with a configured version of node package installed
我想构建一个 Docker 映像,其中包含已安装的节点包。如果在 Dockerfile
中省略或硬编码包版本,则一切正常 (@14.0.0
):
FROM stefanscherer/node-windows:12.16.1-nanoserver-1909
RUN npm install -g @sitecore-jss/sitecore-jss-cli@14.0.0
生成命令和结果:
docker build -t sitecore-jss-cli:14.0.0-nanoserver-1909 .
Successfully built 1c0ebbcd5be2
Successfully tagged sitecore-jss-cli:14.0.0-nanoserver-1909
但是当版本作为参数传递时(为了能够构建任何版本),错误发生了。请查看更新后的 Dockerfile
:
ARG SITECOREJSS_VERSION
FROM stefanscherer/node-windows:12.16.1-nanoserver-1909
RUN npm install -g @sitecore-jss/sitecore-jss-cli@${SITECOREJSS_VERSION}
带有参数和错误的命令:
docker build --build-arg SITECOREJSS_VERSION=14.0.0 -t sitecore-jss-cli:14.0.0-nanoserver-1909 .
...
npm ERR! code EINVALIDTAGNAME
npm ERR! Invalid tag name "${SITECOREJSS_VERSION}": Tags may not have any characters that encodeURIComponent encodes.
看起来参数需要以某种方式转义。知道如何解决这个问题吗?
你有两个问题:
排序
ARG
之外的 FROM
块只能在 FROM
行本身中访问。在这种情况下,因为您不需要使用 --build-arg
作为 FROM
的一部分,所以将它移到里面:
FROM stefanscherer/node-windows:12.16.1-nanoserver-1909
ARG SITECOREJSS_VERSION
...
如果您需要在 FROM
和 Dockerfile 的其他地方使用它,您需要明确说明:
ARG SITECOREJSS_VERSION
FROM ...
ARG SITECOREJSS_VERSION
...
插值
Per this issue on GitHub,如果你想在 Windows 图像中的命令中进行插值,你需要使用 %
:
RUN npm install -g @sitecore-jss/sitecore-jss-cli@%SITECOREJSS_VERSION%
所以完整的工作版本是:
FROM stefanscherer/node-windows:12.16.1-nanoserver-1909
ARG SITECOREJSS_VERSION
RUN npm install -g @sitecore-jss/sitecore-jss-cli@%SITECOREJSS_VERSION%
我想构建一个 Docker 映像,其中包含已安装的节点包。如果在 Dockerfile
中省略或硬编码包版本,则一切正常 (@14.0.0
):
FROM stefanscherer/node-windows:12.16.1-nanoserver-1909
RUN npm install -g @sitecore-jss/sitecore-jss-cli@14.0.0
生成命令和结果:
docker build -t sitecore-jss-cli:14.0.0-nanoserver-1909 .
Successfully built 1c0ebbcd5be2
Successfully tagged sitecore-jss-cli:14.0.0-nanoserver-1909
但是当版本作为参数传递时(为了能够构建任何版本),错误发生了。请查看更新后的 Dockerfile
:
ARG SITECOREJSS_VERSION
FROM stefanscherer/node-windows:12.16.1-nanoserver-1909
RUN npm install -g @sitecore-jss/sitecore-jss-cli@${SITECOREJSS_VERSION}
带有参数和错误的命令:
docker build --build-arg SITECOREJSS_VERSION=14.0.0 -t sitecore-jss-cli:14.0.0-nanoserver-1909 .
...
npm ERR! code EINVALIDTAGNAME
npm ERR! Invalid tag name "${SITECOREJSS_VERSION}": Tags may not have any characters that encodeURIComponent encodes.
看起来参数需要以某种方式转义。知道如何解决这个问题吗?
你有两个问题:
排序
ARG
之外的FROM
块只能在FROM
行本身中访问。在这种情况下,因为您不需要使用--build-arg
作为FROM
的一部分,所以将它移到里面:FROM stefanscherer/node-windows:12.16.1-nanoserver-1909 ARG SITECOREJSS_VERSION ...
如果您需要在
FROM
和 Dockerfile 的其他地方使用它,您需要明确说明:ARG SITECOREJSS_VERSION FROM ... ARG SITECOREJSS_VERSION ...
插值
Per this issue on GitHub,如果你想在 Windows 图像中的命令中进行插值,你需要使用
%
:RUN npm install -g @sitecore-jss/sitecore-jss-cli@%SITECOREJSS_VERSION%
所以完整的工作版本是:
FROM stefanscherer/node-windows:12.16.1-nanoserver-1909
ARG SITECOREJSS_VERSION
RUN npm install -g @sitecore-jss/sitecore-jss-cli@%SITECOREJSS_VERSION%