Fargate 上的 React App 忽略环境变量
React App on Fargate is ignoring env variable
我使用带有负载均衡器的 Fargate 部署了我的 React 应用程序和后端,我注意到我的 React 应用程序使用了错误的端点来访问我的 API,它似乎正在使用它的负载均衡器的 DNS 名称,因为它是端点,即使此端点是使用环境变量配置的(在 React 应用程序上,所以这将是 REACT_APP_API_URL
)。
在我的本地机器上,这个容器工作正常并且能够连接到我的后端。这里显示了正确的端点。
如果我要 运行 Fargate 中的这个完全相同的图像,则会显示错误的端点,这实际上是 URL 访问我的网络应用程序。
并且我在我的任务定义中配置了正确的端点,它与图 1 中所示的正确端点相匹配。我还确保该服务正在使用该端点的最新任务定义。
如果需要,这是我的 docker 文件。
# The first image is for compiling the client files, the second is for serving.
# BUILD IMAGE
FROM node:14-alpine as build-stage
WORKDIR /app
# Install dependencies
COPY package*.json ./
RUN npm install
RUN npm install cross-env -g
RUN npm install npm install @craco/craco -g
# Build
COPY . .
RUN npm run build
# -----------------------------------------------------------------------------
# SERVING IMAGE
FROM fitiavana07/nginx-react
# Copy built files
COPY --from=build-stage /app/build /usr/share/nginx/html
# 80 for HTTP
EXPOSE 80
# Run nginx
CMD nginx -g 'daemon off;'
原来我是个白痴哈哈,你需要在项目的根目录下有一个 .env
文件,这意味着你不能将环境变量传递给 docker 图像。我设法通过在我的 docker 文件上创建 .env
来克服这个问题。
# The first image is for compiling the client files, the second is for serving.
# BUILD IMAGE
FROM node:14-alpine as build-stage
WORKDIR /app
# Install dependencies
COPY package*.json ./
RUN npm install
RUN npm install cross-env -g
RUN npm install npm install @craco/craco -g
# Build
COPY . .
# Create a .env for react app
# Define a required build arg
ARG api_url
# Create a .env file
RUN touch .env
# Write the api url into the env file
RUN echo REACT_APP_API_URL=${api_url} > .env
RUN cat .env
RUN npm run build
# -----------------------------------------------------------------------------
# SERVING IMAGE
FROM fitiavana07/nginx-react
# Copy built files
COPY --from=build-stage /app/build /usr/share/nginx/html
# 80 for HTTP
EXPOSE 80
# Run nginx
CMD nginx -g 'daemon off;'
在我的 GitHub 操作中,我使用此 action 来动态设置此构建参数
我使用带有负载均衡器的 Fargate 部署了我的 React 应用程序和后端,我注意到我的 React 应用程序使用了错误的端点来访问我的 API,它似乎正在使用它的负载均衡器的 DNS 名称,因为它是端点,即使此端点是使用环境变量配置的(在 React 应用程序上,所以这将是 REACT_APP_API_URL
)。
在我的本地机器上,这个容器工作正常并且能够连接到我的后端。这里显示了正确的端点。
如果我要 运行 Fargate 中的这个完全相同的图像,则会显示错误的端点,这实际上是 URL 访问我的网络应用程序。
并且我在我的任务定义中配置了正确的端点,它与图 1 中所示的正确端点相匹配。我还确保该服务正在使用该端点的最新任务定义。
如果需要,这是我的 docker 文件。
# The first image is for compiling the client files, the second is for serving.
# BUILD IMAGE
FROM node:14-alpine as build-stage
WORKDIR /app
# Install dependencies
COPY package*.json ./
RUN npm install
RUN npm install cross-env -g
RUN npm install npm install @craco/craco -g
# Build
COPY . .
RUN npm run build
# -----------------------------------------------------------------------------
# SERVING IMAGE
FROM fitiavana07/nginx-react
# Copy built files
COPY --from=build-stage /app/build /usr/share/nginx/html
# 80 for HTTP
EXPOSE 80
# Run nginx
CMD nginx -g 'daemon off;'
原来我是个白痴哈哈,你需要在项目的根目录下有一个 .env
文件,这意味着你不能将环境变量传递给 docker 图像。我设法通过在我的 docker 文件上创建 .env
来克服这个问题。
# The first image is for compiling the client files, the second is for serving.
# BUILD IMAGE
FROM node:14-alpine as build-stage
WORKDIR /app
# Install dependencies
COPY package*.json ./
RUN npm install
RUN npm install cross-env -g
RUN npm install npm install @craco/craco -g
# Build
COPY . .
# Create a .env for react app
# Define a required build arg
ARG api_url
# Create a .env file
RUN touch .env
# Write the api url into the env file
RUN echo REACT_APP_API_URL=${api_url} > .env
RUN cat .env
RUN npm run build
# -----------------------------------------------------------------------------
# SERVING IMAGE
FROM fitiavana07/nginx-react
# Copy built files
COPY --from=build-stage /app/build /usr/share/nginx/html
# 80 for HTTP
EXPOSE 80
# Run nginx
CMD nginx -g 'daemon off;'
在我的 GitHub 操作中,我使用此 action 来动态设置此构建参数