【发布时间】:2019-02-05 18:14:58
【问题描述】:
我正在使用 docker 构建我的 react 应用程序并将其部署在 nginx 中。
我在 docker-compose.yml 中设置了一个环境变量
version: '2'
services:
nginx:
container_name: ui
environment:
- HOST_IP_ADDRESS= xxx.xxx.xx.xx
build:
context: nginx/
ports:
- "80:80"
创建 docker 容器后,当我 echo 容器内的变量时,我可以看到 hi。
但是,当我尝试使用 process.env.HOST_IP_ADDRESS 在反应中阅读它时,它正在记录 undefined。
我在某处的博客文章中读到,环境变量只能在生产环境中访问。因为,我正在构建应用程序并将其部署在 nginx 中,所以我应该能够访问它,但由于某种原因我无法读取它。
我在这里做一些根本错误的事情吗?如果是这样,请告诉我一个解决方案。我不是反应专家,我只是在管理别人的代码。
更新:
Dockerfile 如下所示:
FROM node:8 as ui-builder
WORKDIR /home/ui
COPY helloworld .
RUN npm install
RUN npm run build
FROM nginx
COPY --from=ui-builder /home/ui/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
React 组件 sn-p 如下:
import React, { Component } from 'react';
class HelloWorld extends Component {
render() {
console.log(process.env.HOST_IP_ADDRESS);
return (
<div className="helloContainer">
<h1>Hello, world!</h1>
</div>
);
}
}
export default HelloWorld;
【问题讨论】:
-
在前端反应 - 后端环境
-
@xadm 所以,我要设置的环境是主机 docker 机器的 IP 地址。这个IP地址会被前端用来访问后端的api。
-
@xadm 上面的代码只是我在真正接触真正代码库之前尝试的一个测试sn-p。
-
在 react 应用程序中编译或使用一些后端技术 (php) 将信息传递到应用程序(包含 js 的 html)并让应用程序参数感知
-
@xadm 的意思是 nginx 只是将 JavaScript 代码提供给浏览器,而浏览器(它不知道任何 Docker 的事情正在发生)看到
process.env.HOST_IP_ADDRESS并不是真的确定如何处理它。