這是我的構建命令
docker build --build-arg APP_PROJ=proj1 --build-arg APP_ENV=dev -t proj1 .
給出兩個引數,APP_ENV和APP_PROJ。這是我的 Dockerfile 內容
FROM node:14.15 AS build
ARG APP_ENV
ARG APP_PROJ
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm cache clean --force
RUN npm i
COPY . .
RUN npm run build:${APP_PROJ}:${APP_ENV}
CMD [ "node", "dist/${APP_PROJ}/server/main.js" ]
我想添加一個可以證明正在構建哪個專案的引數,但是當我運行 docker image 時,它??回傳了一個錯誤
Error: Cannot find module '/usr/src/app/dist/${APP_PROJ}/server/main.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47{
code: 'MODULE_NOT_FOUND',
requireStack: []
}
- 我檢查了我的 dist main.js 是否存在
看起來 dockerFile 無法讀取環境變數APP_PROJ 。如何傳遞引數讓 docker 讀取正確的 main.js?
感謝幫助~
uj5u.com熱心網友回復:
看起來你混淆了“ARGuments”和“ENVironments”。
該檔案有助于理解差異。主要是這樣的:
ARG 僅在構建 Docker 映像(RUN 等)期間可用,而不是在創建映像并從其啟動容器之后(ENTRYPOINT、CMD)
因此,您必須使用 ENV 變數來設定它們,以便您的 CMD 了解它們......
實際上,您可以在構建時按照本檔案(同一網站)從 ARG 設定 ENV。這是常見(不直觀)的方式。
另一種方法是在 Dockerfile 中對它們進行硬編碼(您可以在構建之前使用“sed”命令來根據您的專案設定 DOckerfile)
另外:這可能不起作用,因為當您使用 CMD 作為引數串列時不使用變數替換。您可能必須切換到原始 CMD ( ) 或使用 CMD ( )CMD dosomething "$myvar ${anotherVar}"的 shell 形式CMD dosomething $myvar ${anotherVar}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/416719.html
標籤:
