部署在 AWS EC2 实例上的应用程序:如何让我的 React 容器使用内部 URL 与我的 springboot 容器进行通信?

问题描述 投票:0回答:1

我有两个 docker 容器在 ubuntu EC2 实例上运行。客户端是使用 docker build 和 docker run 构建和运行的。 springboot/postgres docker 是一个 docker 组合。客户端的端口为 14174:4173。 springboot/postgres 有 18080:8080。该实例的 VPC 有两个安全组(default 和 launch-wizard-1)。两者都允许端口 8080 和 18080。

IPv4 Custom TCP TCP 8080 0.0.0.0/0 allow 8080

IPv4 Custom TCP TCP 18080 0.0.0.0/0 allow 18080

这些可能是多余的,因为我也有这个:

IPv4 All traffic All All 0.0.0.0/0 all traffic

我现在只使用http(不是https)。

我可以从我的本地 PC 使用 14173 上的公共 URL 访问 React/vite 客户端。我还可以使用公共 URL 在 18080 上启动 springboot(我宁愿无法继续)。

客户端docker中的.env文件具有VITE_SERVER_API_URL。如果我将其设置为 18080 上的内部 URL 或 18080 上的 localhost,客户端将无法访问 springboot(没有数据加载,并且 springboot 日志显示没有交互)。但如果我将其设置为 18080 上的公共 url,客户端就可以访问后端。

如何设置以便客户端可以使用内部 URL 访问 springboot?

reactjs spring-boot docker amazon-ec2 client-server
1个回答
0
投票

默认情况下,docker 容器是相互隔离的,除非它们位于同一个 docker 网络上。为了让您的客户端容器使用内部 URL 到达 springboot 容器,两个容器需要位于同一个 docker 网络上。

顺便说一句,从容器内部引用 localhost 引用的是其自身,而不是主机或其他容器。

因此您需要在客户端的 .env 中设置 VITE_SERVER_API_URL=http://springboot-containername:internal-port

© www.soinside.com 2019 - 2024. All rights reserved.