spring - Spring 应用程序在放入 Docker 时无法通信
问题描述
我有 2 个相互通信的 spring REST 应用程序(网关/安全)。
当我向网关发送登录请求时,网关会将其转发给安全应用程序,在该应用程序中检查用户是否具有正确的权限。如果是这种情况,将退回一个帐户。这在我的本地电脑上效果很好,但是当我把它放在 docker 中时它停止工作。
我试过了:
- 通过 POSTMAN 直接向安全服务器发送一个 post 请求,这是可行的
- 通过 POSTMAN 直接向网关发送带有错误数据的发布请求,以检查我是否收到自定义错误,这也有效。
- 在不使用 docker 的情况下使用它,这很有效。
我的 docker-compose 看起来像。
我认为出错的代码(当我尝试将其发送到安全应用程序时,这是在网关应用程序中):
如果我需要提供更多数据,请告诉我
解决方案
这是错误的做法。docker 的第一条经验法则是根本不使用localhost
。
您需要在 docker compose 中使用服务的名称,并且应该依赖 docker 容器到容器的通信。
所以在你的情况下,网址应该如下所示
String url = "http://security:8083/auth/login";
同样作为最佳实践,永远不要将 url 直接写入您的代码中。始终application.properties
在您的代码中使用它们,然后使用环境变量覆盖它们。这确保您的代码可以通过覆盖环境变量在不同的环境中运行,并且它们不需要更改代码
推荐阅读
- azure - 如何打开虚拟网关的 enableprivateipaddress 标志?
- android - 在 Flutter 中以 SPEAKER 模式进行直拨电话
- python - djnago-pytest 无法创建测试数据库
- sql - 唯一索引之上的 PostgreSQL Btree 索引
- oracle - 如何让 sql developer 正确显示变音符号而不是显示正方形?
- wordpress - WP 几个 meta_query 匹配,并重复计算
- python-3.x - 如何使用 Boto3 在 Windows EC2 实例中创建用户数据?
- unity3d - 如何根据来自不同脚本的变量缩放对象?
- python - 在 Windows 中从 ubuntu wsl 运行 pyspark,错误:找不到 cmd
- javascript - React:关于此处使用 `useRef` 存储先前状态的混淆