Jos*_*man 6 docker spring-boot
我有一个在 Docker 容器中运行的 Spring Boot 服务。我正在使用 HttpServletRequest 从传入的客户端请求中获取远程 IP 地址。这在本地按预期工作,但是一旦服务在 Docker 容器中运行,获取的 IP 就是 Docker 容器 IP,而不是客户端 IP。有没有办法解决这个问题并获取实际的客户端IP?非常感激任何的帮助。
以下是更多编程细节:
@GetMapping("/foo)
public ResponseEntity requestBar(HttpServletRequest request) {
    String clientIp = request.getRemoteAddr();
    //DO STUFF WITH IP
}
上面是“bar”的 GET 请求示例。使用 HttpServletRequest 您可以获得发出请求的机器的远程地址。在本地运行(在非 Docker 化的本地计算机上)上面的效果非常好。服务获取客户端IP,我可以验证IP是否正确。在 Docker 中托管相同的服务,调用 getRemoteAddr() 将为容器提供默认网关 IP。我希望这个进一步的解释能让我更清楚地了解我想要完成的任务。一如既往,我们将非常感谢任何和所有的帮助。
更新:澄清一些花絮,Spring Boot(v1.5.13)服务在 Docker 主机(Docker 版本 18.06.1-ce,构建 e68fc7a)上运行。我所说的本地运行是指在开发过程中在本地计算机上启动服务时。我使用最新版本的 Intellij 来完成所有 Java 开发工作。该服务可以在我的开发机器上使用 Intellij 启动。
| 归档时间: | 
 | 
| 查看次数: | 793 次 | 
| 最近记录: |