使用 React 和 TypeScript 从 docker 容器获取环境变量
Get environment variables from docker container with react and typescript
我正在开发一个带有 python flask 应用程序后端和 React 和 typescript 前端的网站。
我想docker开发它们。
我写了以下docker文件:
返回docker文件
# Use an official Python runtime as an image
FROM python:3.6
EXPOSE 5000
WORKDIR /app
# copy src files in app folder
COPY ./src/* /app/
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
# Run api ap.py when the container launches with specific ip to reach it from the host
CMD python -m flask run --host=0.0.0.0
字体docker文件
FROM node:13.12.0-alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
# add app
COPY . ./
# start app
CMD ["npm", "start"]
对于 运行 我的容器,我使用这些命令:
# Create docker network
docker network create --subnet=172.28.0.0/16 --gateway=172.28.5.254 example_network
# Create the api
docker run -d --rm --name backend --network example_network --ip=172.28.5.1 -v *Back/Source/Code/Dir*:/app -p 5000:5000 backend_img
# Create the front
docker run -it --rm --name front -p 3000:3000 --network example_network --ip=172.28.5.4 -v Back/Source/Code/Dir/src:/app/src front_img
在这种情况下,一切正常,但 API 端点值在代码中,如果我更改后端的 docker 容器 ip,它将不再工作。
我有以下问题:
我尝试将我的后端端点作为环境变量传递给我的反应 docker 容器,但我无法获得反应中的值,我该如何让它工作?
我尝试对前端容器使用以下命令:
# Create the front
docker run -it --rm --name front -p 3000:3000 --network example_network --ip=172.28.5.4 -v Back/Source/Code/Dir/src:/app/src -e API_ENDPOINT=172.28.5.1:5000 front_img
当我连接到 docker 以获取 env 值时,没问题!
docker exec -ti front sh
echo $API_ENDPOINT
在代码中,我尝试使用以下指令来达到我的环境值:
const API_ENDPOINT=process.env.API_ENDOINT
但是我在控制台中的值是未定义的!
我的前脸连不上我的后背
我还尝试在映像构建期间将该值作为构建参数传递,并将该值放入 .env 文件中,但结果始终相同:值未定义!
新战线docker档案
# pull official base image
FROM node:13.12.0-alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
# add app
COPY . ./
# define env variables
ARG API_HOST=http://172.28.5.1:5000
ENV API_HOST=$API_HOST
RUN echo $API_HOST
RUN echo "API_HOST=$API_HOST" > .env
# start app
CMD ["npm", "start"]
提前感谢您的阅读和回答!
抱歉我的英语很基础
您必须使用前缀 REACT_APP_
You must create custom environment variables beginning with REACT_APP_. Any other variables except NODE_ENV will be ignored to avoid accidentally exposing a private key on the machine that could have the same name. Changing any environment variables will require you to restart the development server if it is running.
- 阅读更多here
我正在开发一个带有 python flask 应用程序后端和 React 和 typescript 前端的网站。
我想docker开发它们。
我写了以下docker文件:
返回docker文件
# Use an official Python runtime as an image
FROM python:3.6
EXPOSE 5000
WORKDIR /app
# copy src files in app folder
COPY ./src/* /app/
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
# Run api ap.py when the container launches with specific ip to reach it from the host
CMD python -m flask run --host=0.0.0.0
字体docker文件
FROM node:13.12.0-alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
# add app
COPY . ./
# start app
CMD ["npm", "start"]
对于 运行 我的容器,我使用这些命令:
# Create docker network
docker network create --subnet=172.28.0.0/16 --gateway=172.28.5.254 example_network
# Create the api
docker run -d --rm --name backend --network example_network --ip=172.28.5.1 -v *Back/Source/Code/Dir*:/app -p 5000:5000 backend_img
# Create the front
docker run -it --rm --name front -p 3000:3000 --network example_network --ip=172.28.5.4 -v Back/Source/Code/Dir/src:/app/src front_img
在这种情况下,一切正常,但 API 端点值在代码中,如果我更改后端的 docker 容器 ip,它将不再工作。
我有以下问题: 我尝试将我的后端端点作为环境变量传递给我的反应 docker 容器,但我无法获得反应中的值,我该如何让它工作?
我尝试对前端容器使用以下命令:
# Create the front
docker run -it --rm --name front -p 3000:3000 --network example_network --ip=172.28.5.4 -v Back/Source/Code/Dir/src:/app/src -e API_ENDPOINT=172.28.5.1:5000 front_img
当我连接到 docker 以获取 env 值时,没问题!
docker exec -ti front sh
echo $API_ENDPOINT
在代码中,我尝试使用以下指令来达到我的环境值:
const API_ENDPOINT=process.env.API_ENDOINT
但是我在控制台中的值是未定义的! 我的前脸连不上我的后背
我还尝试在映像构建期间将该值作为构建参数传递,并将该值放入 .env 文件中,但结果始终相同:值未定义!
新战线docker档案
# pull official base image
FROM node:13.12.0-alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
# add app
COPY . ./
# define env variables
ARG API_HOST=http://172.28.5.1:5000
ENV API_HOST=$API_HOST
RUN echo $API_HOST
RUN echo "API_HOST=$API_HOST" > .env
# start app
CMD ["npm", "start"]
提前感谢您的阅读和回答! 抱歉我的英语很基础
您必须使用前缀 REACT_APP_
You must create custom environment variables beginning with REACT_APP_. Any other variables except NODE_ENV will be ignored to avoid accidentally exposing a private key on the machine that could have the same name. Changing any environment variables will require you to restart the development server if it is running.
- 阅读更多here