我试图将服务器URL传递给在Docker容器中运行的React应用程序。在应用程序中发送HTTP请求时使用它,可以像这样访问:
我尝试直接在Dockerfile中设置变量:
相反,我尝试在构建时将其作为参数传递,就像这里提到的一样:Pass environment variables to Dockerfile during build time:
process.env.server_url
表示server_url。这存储为主机机器上的环境变量。我尝试直接在Dockerfile中设置变量:
ENV server_url=${server_url}
。我认为这不起作用,因为${server_url}
是在Dockerfile中定义的ARGS
。相反,我尝试在构建时将其作为参数传递,就像这里提到的一样:Pass environment variables to Dockerfile during build time:
docker build --buil-arg server_url=$server_url
。然而,我试图重新创建所接受的答案中给出的内容:FROM node:9 as build-deps
WORKDIR /temp
RUN echo $var1
ADD package*.json ./
RUN npm install
ADD . ./
RUN npm run build
# Stage 2 - the production environment
FROM nginx:1.12-alpine
COPY --from=build-deps /temp/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
运行docker build --build-arg var1=hello .
导致STDOUT中出现一个空行。可以确定变量未被正确设置。
我尝试使用docker compose,如这里提到的那样。这似乎有效,docker exec -it container-name printenv
实际上显示环境变量已经存在,但是在React中仍然是undefined
。
我唯一成功让React获取值的方式是在Dockerfile中硬编码: ENV server_url=12.34.56.78
。
我很困惑,因为我预期docker compose解决方案能够起作用,因为实际上在镜像中看到了该变量。我怀疑这可能与我的分层构建和使用nginx提供web应用有关,但我不知道原因或如何解决。
希望得到任何帮助,谢谢。