gpt4 book ai didi

reactjs - 无法在部署时获取kubectl环境变量

转载 作者:行者123 更新时间:2023-12-02 11:39:18 30 4
gpt4 key购买 nike

我有一个带有一些环境变量设置的docker容器。我知道在一个典型的用例中,React无法读取这些变量,因为在编译过程中会替换process.env变量。

我正在尝试解决此问题,而不必使用名为react-env的插件来启动后端服务器。

核心思想是创建一个.env文件,该文件可以使用bash脚本写入。 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文件中?

最佳答案

看起来$ GCP_PROJECT_ID在构建环境中未定义,因此在构建时运行时它不包含在echo命令中。 (我想这是因为您要用kubectl定义它)。

假设您希望$ GCP_PROJECT_ID在构建环境中不存在,而是您要在容器执行时尝试复制的内容(如exec示例所示),那么您的问题是RUN行的引用

RUN echo 'REACT_APP_GCP_PROJECT_ID='$GCP_PROJECT_ID >> /usr/app/.env

在构建期间正在解释$ GCP_PROJECT_ID,这当然是空字符串。在容器内的 shell 中进行的测试中,似乎$ GCP_PROJECT_ID实际上存在于环境中,并且一切都很好。

您实际上需要引用$ GCP_PROJECT_ID变量以使其包含在/usr/app/.env中,就像这样(而不是被解释为空字符串!):
RUN echo 'REACT_APP_GCP_PROJECT_ID=$GCP_PROJECT_ID' >> /usr/app/.env

当然,如果需要在.env文件中包含$ GCP_PROJECT_ID值的文字字符串,则唯一的选择可能是在容器执行开始时实际上对.env进行回显(例如,在顶部的 docker-entrypoint.sh,并从Dockerfile中删除所有相关代码)。

如果我对在进程开始时让kubectl定义错误,那么另一种解决方案将要求您确保docker build本身可以访问该环境变量。您可以使用 --build-arg参数执行此操作,例如:
docker build --build-arg GCP_PROJECT_ID=[correct value] .

在这种情况下,您需要向Dockerfile添加一个参数命令,如下所示:
ARG GCP_PROJECT_ID

在RUN命令之前的某个时刻。

关于reactjs - 无法在部署时获取kubectl环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293584/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com