首页 > 解决方案 > 尝试 Dockerize 时,前端 (React) 调用后端 (express) 无法绑定到 HOST 环境变量

问题描述

我正在尝试对使用 create-react-app 制作的前端及其 express API 后端进行 dockerize。

docker 容器位于 ec2 实例上。我在stackoverflow上尝试了几个教程和线程,但我不知道出了什么问题。

我得到的错误是:

Could not find an open port at ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com.

这是指我的 .env 文件,其中仅包含

HOST= ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com 

我的前端 Dockerfile 如下:

FROM node:12-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --silent
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

而后端的:

FROM node:12-alpine as builder

WORKDIR /app
COPY package.json /app/package.json
RUN npm install
COPY . /app
EXPOSE 3001
CMD ["node", "app.js" ]

我需要后端在 3001 端口上运行,前端在 3000 上运行。前端通过 package.json 中的代理行绑定到后端 api,我在其中放置了:

"proxy":"http://ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com:3001",

两个容器都构建良好。但是,使用运行后端docker run -p 3001:3001 server然后docker run -p 3000:3000 client吐出错误

Attempting to bind to HOST environment variable: ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com
If this was unintentional, check that you haven't mistakenly set it in your shell.
Learn more here: https://xxx.xx/xxx-advanced-config

Could not find an open port at ec2-x-xx-xx-xxx.eu-west-2.compute.amazonaws.com.
Network error message: listen EADDRNOTAVAIL: address not available 10.xx.0.xxx

我试过只运行服务器端,然后从我的本地机器运行 npm start,它可以工作。问题似乎与容器之间的 docker 网络有关。

我还尝试使用命令运行服务器端

docker run -p 10.xx.0.xxx:3000:3000 client 

以确保客户端 ping 正确的 IP 地址,但这不起作用。

任何人都可以给我一些方向吗?

如果您需要有关源代码的更多信息,请发表评论,我不想让线程变得比现在更长而使线程混乱..

谢谢

标签: node.jsdockerexpressdockerfilecreate-react-app

解决方案


推荐阅读