node.js - 尝试 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 地址,但这不起作用。
任何人都可以给我一些方向吗?
如果您需要有关源代码的更多信息,请发表评论,我不想让线程变得比现在更长而使线程混乱..
谢谢
解决方案
推荐阅读
- python - 参考新单元格在openpyxl中复制样式
- c++ - 如何在 Mac 上找到实际的 Clang 版本?
- php - 谁能看到这个 PHP PDO 语句有什么问题
- node.js - Node.js:如何使用 .read() 从流中读取数据
- data-visualization - Qlikview 中的“加载”语句是否不允许对字段进行多个顺序操作?
- hadoop-yarn - 请解释 Flink on YARN 的详细信息
- swift - 如何删除字符串中的某些字符?
- c# - Control.InvokeRequired - 服从竞争条件
- c++ - 为什么使用标准类型作为模板参数?
- java - java.lang.ClassCastException com.sun.xml.bind.v2.runtime.JAXBContextImpl 无法转换为 com.sun.xml.bind.api.JAXBRIContext