繁体   English   中英

如何将 docker 环境变量传递给 npm 脚本?

[英]How can I pass docker environment variables to an npm script?

正如标题所说......作为一个菜鸟,我已经做了一个很好的尝试,但似乎无法弄清楚。

我有一个 dockerfile

FROM node:12
WORKDIR /app
COPY . /app
RUN npm config set registry https://registry.npmjs.org/
RUN npm install
EXPOSE 8080
ENTRYPOINT ["npm", "start",]
CMD [ "--", "-e=$ENVIRONMENT", "-t=$TESTS" ]

和我的 package.json 中的脚本,如下所示:

"scripts": {
    "start": "node main.js"
  }

Main.js 需要两个参数。 E&T。 我正在努力将这些传递给容器,然后让脚本运行 main.js(注意,我通过脚本运行它是有原因的,我只是让这个例子变得简单)

要运行我的 npm 脚本,我可以这样做:

npm start -- -e=abc -t=xyz

所以我试过这个,但没有快乐:

docker run -e ENVIRONMENT=abc -e TESTS=xyz myimage  

谢谢

当您使用 JSON 形式的CMD (或ENTRYPOINTRUN )时,根本没有插值; 您的脚本应该将字符串-e=$ENVIRONMENT视为参数。 相反,您需要使用 shell 形式,它将把它包装在一个扩展环境变量的 shell 中。 你不能用这个特殊的ENTRYPOINTCMD拆分来做到这一点,但同时,这并不是真正必要的; 只需将整个内容放在CMD

# No ENTRYPOINT
# No quoting; Docker wraps this in `sh -c ...`
CMD npm start -- -e="$ENVIRONMENT" -t="$TESTS"

您也可以直接在您的应用程序中处理这些。 例如, yargs库有一个.env()函数,它允许将环境变量直接用作选项。 如果没有直接提供,您还可以将process.env.TESTS设为该选项的默认值。 这种方法解决了使用您需要的参数组合构建(并可能扩展)有效命令行的麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM