我STAGE在構建 docker 映像時呼叫了一個引數,我提供了這個引數,docker build如下所示:
docker build --build-arg STAGE=test -t my-image:latest .
STAGE 值是我想在我的 angular 應用程式中使用的環境,但構建沒有按預期作業。
Dockerfile:
FROM node:10.21.0
ARG STAGE
RUN npm install -g @angular/[email protected]
# install dependencies
WORKDIR /app
COPY package.json /app
COPY yarn.lock /app
RUN yarn add enhanced-resolve@^3.1.0
RUN yarn install --pure-lockfile
# build the frontend
COPY . /app
RUN ng build --configuration=$STAGE && cp favicon.png dist/
ENV ENVIRONMENT=$STAGE
# start the server
CMD node server.js
正如您在 Dockerfile 中看到的,我使用特定環境構建了 Angular 應用程式,并運行節點服務器來為應用程式提供服務,同時我將一個環境變數添加到包含STAGE引數值的節點容器中這條線ENV ENVIRONMENT=$STAGE
奇怪的是 STAGE 值有時包含一個值,有時它是空的,我怎么知道的?
我console.log(environment)在 Angular 應用程式和節點服務器檔案中都撰寫了一個
在 Angular 中我得到了默認環境,盡管環境應該是"test"并且在 node 中我得到了正確的STAGE引數值,即"test"。
總結:
這一行RUN ng build --configuration=$STAGE && cp favicon.png dist/的STAGE值是空的
,在這一行ENV ENVIRONMENT=$STAGE它包含一個值!!
而且這種情況僅在構建專案時發生在AWS 的 CodeBuild 上,當我在本地運行docker build時它作業正常!
關于為什么會發生這種情況的任何想法?
uj5u.com熱心網友回復:
我無法復制您的問題,但您可以嘗試替換
ENV ENVIRONMENT=$STAGE
# start the server
CMD node server.js
和
CMD /bin/sh ENVIRONMENT=$STAGE node server.js
請告訴我它是否有效。
編輯
該指令RUN ng build --configuration=$STAGE應該$STAGE從環境中獲取值,而不是從 docker build 引數中獲取值,因此您可以按如下方式重寫 docker 檔案:
FROM node:10.21.0
ARG STAGE
ENV ENVIRONMENT=$STAGE
RUN npm install -g @angular/[email protected]
# install dependencies
WORKDIR /app
COPY package.json /app
COPY yarn.lock /app
RUN yarn add enhanced-resolve@^3.1.0
RUN yarn install --pure-lockfile
# build the frontend
COPY . /app
RUN ng build --configuration=$ENVIRONMENT && cp favicon.png dist/
# start the server
CMD node server.js
uj5u.com熱心網友回復:
ENV ENVIRONMENT=$STAGE定義 arg 后,您需要向右移動ARG STAGE
并指向您的 ng 構建中的 $ENVIRONMENT - ng build --configuration=$ENVIRONMENT
還要確保在構建影像時提供引數
docker build --build-arg STAGE=test .
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/335912.html
標籤:有角的 码头工人 aws-codebuild
上一篇:ControlValueAccessor和FormControlValue不同步
下一篇:如何在角管中異步設定變數?
