簡體   English   中英

創建React App Build和Docker-Compose不傳遞環境變量

[英]Create React App Build and Docker-Compose do not pass env variables

我目前正在嘗試進行CRA應用程序的多步驟構建。 我的dockerfile如下

FROM node:10-alpine

WORKDIR /usr/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM nginx:1.15

COPY --from=0 /usr/app/nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=0 /usr/app/build /usr/share/nginx/html

EXPOSE 6000

我的react部分的docker撰寫文件如下

  web_front:
    build:
      context: Web Front-CRA
    ports:
      - "${WEB_FRONT_PORT}:6000"
    env_file:
      - .env
    volumes:
      - /usr/app/node_modules
      - ./Web Front-CRA:/usr/app

當我嘗試使用docker-compose up --build運行此程序時,我無法讀取NODE_PATH=./src/環境文件(實際上所有環境變量都在RUN npm run build階段。

但是,如果我只是像下面那樣更改dockerfile來運行dev環境,它就可以完美運行-所有的env文件都可以通過

FROM node:10-alpine

# work directory
WORKDIR /usr/app

# Copy dependencies first for effective caching
COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 6000

CMD ["npm", "run", "start"]

我目前正在使用ubuntu 18和docker-compose v1.23.2和Docker 18.09.0。 我究竟做錯了什么?

.env文件是.env -compose的一個特殊的名稱保留文件,用於設置環境變量的默認值,因此,如果要使用它,則不應該在撰寫文件中指定,也不要使用其他文件名(例如: myservice.env )作為env_file部分。

  web_front:
    env_file:
      - webfront.env
...

docker文檔在https://docs.docker.com/compose/env-file/下的Compose file and CLI variables / Notes部分模糊地提到了這一點

.env文件中定義的環境變量在容器內部不會自動顯示。

要設置容器適用的環境變量,請遵循Compose中的環境變量主題中的指南,該指南描述了如何將Shell環境變量傳遞給容器,如何在Compose文件中定義環境變量,以及更多信息:

為了將環境變量從docker compose構建階段傳遞到dockerfile,必須在docker -compose build step中使用args :。 下面的例子

web_front:
    build:
      context: Web Front-CRA
      args:
         NODE_PATH=./src/
    ports:
      - "${WEB_FRONT_PORT}:6000"
    env_file:
      - .env
    volumes:
      - /usr/app/node_modules
      - ./Web Front-CRA:/usr/app

對應的dockerfile

FROM node:10-alpine
ARG NODE_PATH
WORKDIR /usr/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM nginx:1.15

COPY --from=0 /usr/app/nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=0 /usr/app/build /usr/share/nginx/html

EXPOSE 6000

使用$NODE_PATH在dockerfile中訪問它。 PS我在這里使用環境變量,而不是envfile。 但我希望你明白這一點。 干杯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM