使用已安装的节点软件包的配置版本构建Docker映像

时间:2020-04-02 13:55:58

标签: docker npm npm-install docker-for-windows

我想构建一个包含已安装的节点包的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.

看起来该参数需要以某种方式转义。有什么线索解决该问题吗?

1 个答案:

答案 0 :(得分:2)

您有两个问题:

  1. 订购

    list.sort((o1, o2) -> o1.get("code").compareTo(o2.get("code"))); 外部的ARG 只能在FROM行本身中访问。在这种情况下,由于您不需要将FROM用作--build-arg的一部分,请将其移入内部:

    FROM

    如果需要在Dockerfile的FROM stefanscherer/node-windows:12.16.1-nanoserver-1909 ARG SITECOREJSS_VERSION ... 中使用它,则需要明确说明:

    FROM
  2. 插值

    对于每个this issue on GitHub,如果要在Windows映像的命令中进行插值,则需要使用ARG SITECOREJSS_VERSION FROM ... ARG SITECOREJSS_VERSION ...

    %

因此完整的工作版本为:

RUN npm install -g @sitecore-jss/sitecore-jss-cli@%SITECOREJSS_VERSION%