簡體   English   中英

如何通過在 docker-compose.yaml 中傳遞 env_file 從 dockerfile 容器重建 create-react-app

[英]How to rebuild create-react-app from a dockerfile container by passing env_file in docker-compose.yaml

我會盡量做到描述性,但我有一個用 creat-react-app 構建的 react 應用程序,我構建了一個 docker 鏡像。

dockerfile

FROM node:17-alpine

# set working directory
WORKDIR /app

# install app dependencies
#copies package.json and package-lock.json to Docker environment
COPY package.json ./

RUN apk add --no-cache --virtual .gyp python3 make g++ \
    && yarn install \
    && apk del .gyp

# Copies everything over to Docker environment
COPY . ./
RUN yarn build-docker

#install serve package
RUN yarn global add serve

EXPOSE 3000 5000
ENTRYPOINT ["serve", "-s", "build"]

使用項目中包含的.env文件在本地運行良好。 對於我們的生產和開發,我們使用env_file docker-compose並將env_file包含在我們docker-compose.yaml

docker-compse.yaml 示例

app:
    container_name: app
    image: {image_source}
    restart: always
    env_file:
      - env/app.env

api:
    container_name: api
    image: {image_source}
    restart: always
    env_file:
      - env/global.env
      - env/db.env

api 工作正常,因為它使用ENTRYPOINT ["npm", "start"]並在每次啟動時重新加載.env文件,但由於app是在.env docker-compose up -d之前構建的,

他們是一種使用yarn build-docker .env docker-compose重建的方法,以便我的新構建獲得正確的.env文件嗎?

我終於找到了解決問題的方法。

我沒有在容器中構建應用程序,而是在package.json鏈接了這兩個操作,並在服務之前簡單地運行構建。

包.json

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "build-docker": "react-scripts --openssl-legacy-provider build",
    "build-start": "react-scripts --openssl-legacy-provider build && serve -s build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

"build-start": "react-scripts --openssl-legacy-provider build && serve -s build"

在 dockerfile 中,我刪除了yarn build-docker ENTRYPOINT ["npm", "run", "build-start"]並將入口點更改為ENTRYPOINT ["npm", "run", "build-start"]

文件

FROM node:17-alpine

# set working directory
WORKDIR /app

# install app dependencies
#copies package.json and package-lock.json to Docker environment
COPY package.json ./

RUN apk add --no-cache --virtual .gyp python3 make g++ \
    && yarn install \
    && apk del .gyp

# Copies everything over to Docker environment
COPY . ./

##### REMOVED THE FIRST BUILD 
#RUN yarn build-docker 

#install serve package
RUN yarn global add serve

EXPOSE 3000 5000
##### CHANGED THE ENTRYPOINT WITH THE NEW SCRIPT
ENTRYPOINT ["npm", "run", "build-start"]

因此,每次使用.env -compose 時, .env在構建期間使用.env

希望這可以幫助某人!

暫無
暫無

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

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