簡體   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