[英]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
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
鏈接了這兩個操作,並在服務之前簡單地運行構建。
"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.