java - 如何从 docker 容器发送 http 请求到本地机器?
问题描述
我有一个在 docker 容器上运行的 Web 应用程序,该应用程序必须向我的本地计算机(localhost)发送请求,当我尝试这样做时,我得到以下异常:
java.util.concurrent.ExecutionException: java.net.ConnectException: Connection refused: localhost/127.0.0.1:9033
我试图给你一些更多的细节。我看了这篇文章,但它对我不起作用。
首先,我想解释一下我的项目结构: 1. 我有一个项目,它由两部分组成:前端(angular 9)和后端(play 2.8.x 框架) 2. 我还有另一个项目(web-service)
我的第一个项目(后端、前端)放置在 docker 容器中,第二个项目(Web 服务)放置在 localhost 中。我在这些项目之间有以下流程:
1. 用户(从 Web 浏览器)向后端发送请求,例如可能是登录请求。
2. 后端处理此请求(从数据库中检索数据)并将这些数据发送到放置在本地主机上的 Web 服务。
我在尝试将数据发送到 Web 服务的第 2 步时遇到问题。我得到了上面写的异常。
我正在尝试设置--network=host
,但在这种情况下,我进入404 status code
了浏览器。我该如何解决这个问题?
解决方案
您不能localhost
对容器内部执行请求,因为从容器的角度来看localhost
,它不是主机(docker 运行的地方),而是容器本身。
如果9033
是您的服务器在您的机器上侦听的端口,您可以在运行容器时通过以下方式进行映射
docker run --expose 9033 containerName
然后,如果没有对容器应用自定义网络配置,则默认网关(使用 看到ip route show | grep 'default' | awk '{print $3}'
)对应于您应该连接的 IP。
9000
我尝试使用在主机端口上运行的简单 Python HTTP 服务器进行此操作。
从主机内部:python3 -m http.server 9000
从容器:
export IP=$(ip route show | grep 'default' | awk '{print $3}')
curl -k -I -X GET "${IP}:9000"
给HTTP/1.0 200 OK
推荐阅读
- ios - 同时使用 TabBarController 和 NavigationController
- javascript - 如何使用javascript在浏览器中修改文件内容
- python - 如何在 x 轴上显示所有 12 个月?
- javascript - 如何使用 Quantcast Choice 根据 IAB TCF v2.0 的同意显示或阻止个性化 Adsense 广告?
- java - 找不到任何支持 RSA/None/OAEPWITHSHA-256ANDMGF1PADDING 的提供程序
- javascript - 类型“typeof Realm”.ts(2339) 上不存在属性“App”
- laravel - 拉拉维尔。如何在一列的每一行中保存一个新值?
- c# - 如何从 EF Core 中的实体属性生成自定义 ID?
- c# - 任务和返回类型
- javascript - Ajax 作为结果从 php 获取整个页面