Reactjs 通过react-env插件为dockerize react应用程序读取docker环境变量?
我有一个docker容器,其中设置了一些环境变量。我知道在一个典型的用例中,React无法在Reactjs 通过react-env插件为dockerize react应用程序读取docker环境变量?,reactjs,bash,docker,Reactjs,Bash,Docker,我有一个docker容器,其中设置了一些环境变量。我知道在一个典型的用例中,React无法在过程中读取这些变量。env变量在传输过程中被替换 我正在尝试解决这个问题,而不必使用名为的插件来启动后端服务器 其核心思想是创建一个.env文件,该文件可以使用bash脚本写入。bash脚本将所有环境变量复制到.env文件中。该插件将生成一个env.js文件,然后React应用程序将在运行时使用该文件 在我的设置中,我创建了两个示例环境变量 REACT\u APP\u SETUP=“OK”-在.env文
过程中读取这些变量。env
变量在传输过程中被替换
我正在尝试解决这个问题,而不必使用名为的插件来启动后端服务器
其核心思想是创建一个.env
文件,该文件可以使用bash
脚本写入。bash
脚本将所有环境变量复制到.env
文件中。该插件将生成一个env.js
文件,然后React应用程序将在运行时使用该文件
在我的设置中,我创建了两个示例环境变量
-在REACT\u APP\u SETUP=“OK”
文件中硬编码.env
-由bash文件编写REACT\u APP\u GCP\u PROJECT\u ID=“SOMEID”
# .env
REACT_APP_SETUP="OK" //prewritten env for testing.
docker entrypoint.sh
#!/bin/sh
printf "\n" >> /usr/app/.env
//env that is supposed to be copied.
printf 'REACT_APP_GCP_PROJECT_ID="%s"' SOMEID >> /usr/app/.env
serve build
Dockerfile
# Base version
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 yarn
# Build application.
RUN yarn build
# Set entrypoint of application.
ENTRYPOINT [ "/usr/app/docker-entrypoint.sh" ]
OK
undefined
App.jsx
...
console.log(env("SETUP"));
console.log(env("GCP_PROJECT_ID"));
...
检查控制台
# Base version
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 yarn
# Build application.
RUN yarn build
# Set entrypoint of application.
ENTRYPOINT [ "/usr/app/docker-entrypoint.sh" ]
OK
undefined
在上面的示例设置中,我们可以看到插件的工作原理是,停靠的应用程序确实为React应用程序生成了env.js
,因此产生了OK
控制台输出
但是,我似乎无法让bash文件写入.env
文件,因此无法获得未定义的控制台输出
exec
ing到容器中也会显示.env
文件,该文件包含REACT\u APP\u GCP\u PROJECT\u ID=“SOMEID”
和REACT\u APP\u SETUP=“OK”
条目
我怀疑env.js
是在bash文件有机会写入.env
文件之前生成的
如何写入我的.env
文件,以便插件可以生成一个env.js
文件,我的应用程序可以从中读取环境变量?我建议您在构建应用程序之前写入该文件:
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 printf 'REACT_APP_GCP_PROJECT_ID="%s"' SOMEID >> /usr/app/.env
RUN yarn
# Build application.
RUN yarn build
# Set entrypoint of application.
ENTRYPOINT [ "/usr/app/docker-entrypoint.sh" ]
你的入口点是:
#!/bin/sh
serve build