我在一个应在Docker群中运行的项目中使用react-admin。
由于我们有多个环境,因此我定义了一个环境变量REACT_APP_API_ENDPOINT
,该变量指向应用程序的API,react-admin将与之交互。
到目前为止,我了解到必须在构建时将此变量“烘焙到react-admin中”。因此,我在Dockerfile
中添加了以下内容:
ARG REACT_APP_API_ENDPOINT
ENV REACT_APP_API_ENDPOINT $REACT_APP_API_ENDPOINT
如果这是真的,我的以下假设是否正确?
REACT_APP_API_ENDPOINT
命令时,我必须为docker build
设置值。还是有一种更可行,更动态的方式将该变量传递给react-admin?
答案 0 :(得分:0)
我终于开始工作了。
Dockerfile
ARG REACT_APP_API_ENDPOINT
ENV REACT_APP_API_ENDPOINT $REACT_APP_API_ENDPOINT
然后,构建容器:
docker build -t myimage --build-arg REACT_APP_API_ENDPOINT=<URL> .
在我看来,这有点怪异,但由于在构建时React确实需要像REACT_APP_MY_VARIABLE
这样的自定义变量,所以我找不到其他办法。
答案 1 :(得分:0)
起初,我认为在docker-compose文件中传递环境变量会起作用,但是在Dockerfile(用于打印系统环境变量)中使用RUN printenv
时,我发现传入的变量在以下情况下不可用React正在构建生产文件。
这里的关键是在创建镜像时,在创建React构建文件之前在Dockerfile中传递环境变量。
因此,这样的Dockerfile应该可以工作:
FROM node:13.12.0-alpine as build WORKDIR /app ENV PATH /app/node_modules/.bin:$PATH #declaring react custom environment variable ENV REACT_APP_API_HOST http://localhost:8080 COPY package.json ./ COPY package-lock.json ./ RUN npm ci --silent COPY . ./ RUN npm run build