[英]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.