检查 React 应用程序是不是在 Docker 容器中运行
Posted
技术标签:
【中文标题】检查 React 应用程序是不是在 Docker 容器中运行【英文标题】:Check whether React application is running in a Docker container检查 React 应用程序是否在 Docker 容器中运行 【发布时间】:2019-05-31 13:56:28 【问题描述】:对于节点服务器,我能够使用is-docker
包确定它们是否在 Docker 容器中运行。这显然不适用于在浏览器中运行的 React 应用程序,而不是使fs
不可用的命令行。有没有其他方法可以让 Web 应用判断它是否在 Docker 容器中运行?
【问题讨论】:
浏览器几乎从不在 Docker 容器中运行,因此您可以做出相当强的假设,即基于浏览器的 React 应用程序没有在 Docker 容器中运行。为什么重要? 如果您需要知道在浏览器中运行的 React 应用程序,那么只需将标志向下传递或通过 HTTP 请求将其查询到服务器 @DavidMaze 我的问题很可能是模棱两可的。当然,我并没有在 Docker 容器中运行实际的浏览器,暂时只运行使用 playserve
服务的应用程序。当用户浏览应用程序时,在用户浏览器中执行的构建代码不再能够轻松访问有关其运行的服务器的信息。尤其是当涉及到识别服务器是否被 dockerized 时。
只是一个小补充:我的动机是我连接到一个 GraphQL 服务器,这取决于这是在开发期间通过localhost
本地发生还是在生产中使用docker-compose
在多容器设置中发生我希望应用程序连接到链接服务器(通过docker-compose
)而不是普通的localhost
。
【参考方案1】:
我注意到在构建期间使用.env
文件将create-react-app
supports injecting environment variables 转换为process.env
。因此,我创建了一个包含REACT_APP_DOCKERENV=false
的.env.development
文件和一个包含REACT_APP_DOCKERENV=true
的.env.production
文件。然后分别在运行yarn start
和yarn build
时注入这些变量。
当然,这假设我的开发构建始终在本地执行,而生产构建始终在 Docker 中执行,这适用于我的特定场景。
【讨论】:
以上是关于检查 React 应用程序是不是在 Docker 容器中运行的主要内容,如果未能解决你的问题,请参考以下文章
React Native 检查是不是在 Android 上启用了应用通知
检查是不是在 React Native iOS 应用程序中打开了 WiFi
React-native-navigation 在推送之前检查 componentId 是不是存在
检查是不是登录 - React Router App ES6