将自定义环境变量传递到dockerized react-admin应用中

时间:2019-03-11 14:50:02

标签: reactjs docker react-admin

我在一个应在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设置值。
  • 每个环境我需要一个Docker映像。

还是有一种更可行,更动态的方式将该变量传递给react-admin?

2 个答案:

答案 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