reactjs - docker 化后无法在浏览器中打开React应用

标签 reactjs docker kubernetes dockerfile google-kubernetes-engine

我正在尝试将React应用程序 jetty 化。我正在使用以下Dockerfile实现此目的。

# base image
FROM node:9.4

# set working directory
WORKDIR /usr/src/app

# install and cache app dependencies
COPY package*.json ./
ADD package.json /usr/src/app/package.json
RUN npm install

# Bundle app source
COPY . .

# Specify port
EXPOSE 8081

# start app
CMD ["npm", "start"]


另外,在我的package.json中,启动脚本定义为
"scripts": { "start": "webpack-dev-server --mode development --open", .... }
我将图像构建为:
docker build . -t myimage

我终于运行了图像
docker run IMAGE_ID

然后,此命令将运行图像,但是当我转到localhost:8080或localhost:8081时,我什么都看不到。

但是,当我进入docker容器中获取myimage并执行curl -X GET http:localhost:8080时,我可以访问我的react应用程序。

我也将其部署在google-kubernetes上,并在此基础上公开了负载均衡器服务。但是,发生了同样的事情,我无法访问暴露端点上的react-app,但是当我登录到容器并发出curl请求时,我正在找回index.html。

因此,如何运行该docker镜像的镜像,以便可以通过浏览器访问该应用程序。

最佳答案

当您在Dockerfile中使用EXPOSE时,它仅声明该服务正在侦听指定的端口(在您的情况下为8081),但实际上并未创建任何端口转发。

要将流量从主机实际转发到服务,必须使用-p标志指定端口映射

例如:docker run -d -p 80:8080 myimage将启动一个容器并将请求转发到localhost:80到容器端口8080

在此处了解有关EXPOSE的更多信息https://docs.docker.com/engine/reference/builder/#expose

更新

因此,通常,当您在本地开发节点应用程序并运行webpack dev-server时,它将侦听127.0.0.1,这很好,因为您打算从托管的同一台计算机上访问该站点。但是由于在docker中可以将容器视为一个单独的实例,这意味着您需要能够从“外部”世界访问它,这意味着有必要重新配置dev-server以侦听0.0.0.0(基本上是指分配给“实例”的所有IP地址)

因此,通过更新dev-server配置以侦听0.0.0.0,您应该能够从主机访问您的应用程序。
链接到文档:https://webpack.js.org/configuration/dev-server/#devserverhost

关于reactjs - docker 化后无法在浏览器中打开React应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56759017/

相关文章:

html - 为什么使用d3 svg组件时文档默认为最小div高度?

javascript - 使用状态响应所需的验证

node.js - 如何使用 Docker Compose 将容器 A 中的 Node.js TCP 客户端连接到容器 B 中的 TCP 服务器?

python - 如何将 django 连接到 docker redis 容器?

docker - 尝试以非 root 用户身份从容器内部写入已安装的卷时出现问题

mysql - Kubernetes + MySQL : Creating custom database and user in a Kubernetes container

kubernetes - 在金丝雀部署策略中,将特定用户重定向到具有新版本的 pod

reactjs - React Native - 如何连接到 AWS DynamoDB 表

javascript - React-native 从 Camera Roll 和 Camera Roll API 获取所有照片

kubernetes - 使用 RBAC 时, "kubectl auth reconcile"和 "kubectl apply"有什么区别?