EC2 前端上的 Docker 容器未连接到后端



我部署了一个带有后端和前端的单一docker容器。由于种种原因,对我来说这样做要容易得多。

docker容器在本地工作良好,FE和BE相互作用。然而,一旦它被部署到EC2设备,只有FE是可访问的,它不能连接到BE。

FE是一个运行在端口3000上的响应应用程序。BE是一个节点/express后端,在端口5000上运行一个nodemon服务器。我知道没有恶魔应该在开发环境中,但如果我让它在本地docker容器上运行,没有理由它不应该在EC2设备上工作,对吧?

我已经为两个端口正确配置了安全组,并且我已经检查了容器是否在这些端口上运行。

我觉得有点力不胜任,除了整个应用程序之外,我能提供什么来更好地帮助确定这里的问题吗?

Dockerfile:

FROM node:16.17.0
WORKDIR /client
COPY ./client/package.json ./client/package.json
RUN npm i
COPY ./client ./client
WORKDIR /server
COPY ./server/package.json ./server/package.json
RUN npm i
COPY ./server ./server
EXPOSE 3000 5000
WORKDIR /client
CMD ["npm", "run", "remote-start"]

远程启动脚本同时启动客户端和服务器端服务器。如前所述,这在本地工作得很好。

我也在客户端包中配置过。Json如下:

"proxy": "http://<IP-Address>:5000"

当它是localhost:5000

时,这对本地docker容器有效

如何在EC2上启动一个Docker容器中的React应用程序和Express后端

好的,我看过了。让react FE和节点BE在EC2设备上连接的方法如下。这假定了我假设您从dockerfile中获得的结构:

client
- package.json (starts a server on p 3000)
- all client files
server
- package.json (starts a server on p 5000)
- all server files
  1. 使用你上面发布的docker文件

  2. 在react-app客户端中,使用客户端包中的代理行。EC2设备的公网IP地址

"proxy": "http://<IP-Address>:5000"
  1. 确保在EC2安全组中可以访问端口3000和5000

  2. 不需要更改express侦听的位置

app.listen(5000, () => {
  1. 要一次启动两个服务器,您需要一个脚本来支持您的docker CMD(我假设您的npm run remote start是这样的),可以同时启动它们:
"remote-start": "cd .. && cd server && npm run dev & react-scripts start"

现在,当容器部署到EC2设备时,BE和FE都将运行,并且可以通过EC2设备的IP地址访问。

在测试中,我发现当容器启动时EC2设备可能会冻结。给它一些时间,它应该会好起来的。

正如Zac Anger所提到的,您可以卷曲到端口,但使用EC2设备的IP地址来测试其是否运行。

最新更新