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