【发布时间】:2019-10-08 20:22:19
【问题描述】:
我有一个带有一些环境变量设置的 docker 容器。我知道在典型的用例中,React 无法读取这些变量,因为 process.env 变量在转译期间被替换。
我正在尝试解决这个问题,而不必使用名为 react-env 的插件来启动后端服务器。
核心思想是创建一个可以使用 bash 脚本写入的 .env 文件。 bash 脚本会将所有环境变量复制到 .env 文件中。该插件将生成一个 env.js 文件,然后将由 React 应用程序在运行时使用。
Dockerfile
FROM node:9
# Install yarn
RUN npm install yarn
# Install serve.js
RUN yarn global add serve
# Create app directory
WORKDIR /usr/app
# Copy all necessary files and grant permissions.
# - yarn.lock
# - package.json
# - .env
# - docker-entrypoint.sh
COPY . /usr/app/
COPY yarn.lock /usr/app
COPY package.json /usr/app
COPY .env /usr/app
COPY docker-entrypoint.sh /usr/app/docker-entrypoint.sh
RUN chmod 777 /usr/app/docker-entrypoint.sh
# Install dependencies.
RUN printf "\n" >> /usr/app/.env
RUN echo 'REACT_APP_GCP_PROJECT_ID='$GCP_PROJECT_ID >> /usr/app/.env //READ ENVIRONMENTAL VARIABLE HERE
RUN yarn
# Build application.
RUN yarn build
# Set entrypoint of application.
ENTRYPOINT [ "/usr/app/docker-entrypoint.sh" ]
docker-entrypoint.sh
serve build
App.jsx
...
console.log(env("GCP_PROJECT_ID"));
...
检查控制台
'' //Empty string.
但是,在制作镜像并部署应用程序后,控制台会输出环境变量的空字符串。
手动exec 进入并正确运行echo 命令确实有效:
手动查询:
# echo 'REACT_APP_GCP_PROJECT_ID='$GCP_PROJECT_ID
REACT_APP_GCP_PROJECT_ID=SOME_VALUE
但是
# cat .env
REACT_APP_SETUP="OK"
REACT_APP_GCP_PROJECT_ID=
如何在 React 运行之前将我的 pod 环境变量放入我的 .env 文件中?
【问题讨论】:
-
The first question you asked in this series 描述了一个应该工作的基于入口点的解决方案;你还在为此烦恼吗?
Dockerfile中的所有内容都发生在您的 Kubernetes 设置中的任何内容被考虑之前,因此您无法在构建阶段设置部署时环境变量。
标签: reactjs docker kubernetes dockerfile