为了账号安全,请及时绑定邮箱和手机立即绑定

当按服务名称从其他 docker-compose 服务请求时

当按服务名称从其他 docker-compose 服务请求时

ABOUTYOU 2021-06-10 09:16:04
我正在尝试在我们的开发设置中引入 Spring Boot REST 服务。开发设置使用 docker-compose 和 API 网关来公开同一域(即本地主机)上的各个服务。当我尝试通过共享 docker-compose 文件中的服务名称从另一个容器内部向我的服务发出 HTTP 请求时,该服务返回 400。设置我已经编辑了我们的 docker-compose 文件,所以它看起来像下面介绍 Spring Boot Java 服务。该服务基于 spring-boot-starter-parent (2.0.3.RELEASE) 和 spring-boot-starter-web。我还没有配置任何与 web 服务器相关的东西(除了添加 server.server-header 属性以确保我自己的请求命中我的服务)。version: '3'services:  ...  hello_java:    build:      context: ../hello-java/      dockerfile: Dockerfile    depends_on:      - postgres      - castle_black    ports:      - "8301:8080"  castle_black:    build: ../castle-black/tyk-gateway    ports:      - "8191:8080"    depends_on:      - redis行为如果我从容器外部请求 hello 服务(例如在 localhost:8301 上的浏览器中),它会正确回复。如果我在一个容器内,但是获取了带有我的新服务的容器在 docker 网络中获得的 IP,并使用新服务也能正确响应。下面我展示了从 API 网关容器内部到 Java 服务的请求,首先使用服务名称,然后使用已解析的 IP。它仅在 IP 案例中以正确的响应进行回复。# curl -v http://hello_java:8080/hello-java/greet?username=Java* Hostname was NOT found in DNS cache*   Trying 172.19.0.6...* Connected to hello_java (172.19.0.6) port 8080 (#0)> GET /hello-java/greet?username=Java HTTP/1.1> User-Agent: curl/7.35.0> Host: hello_java:8080> Accept: */*> < HTTP/1.1 400 < Transfer-Encoding: chunked< Date: Wed, 01 Aug 2018 11:34:34 GMT< Connection: close* Server MySpringBootApp is not blacklisted< Server: MySpringBootApp< * Closing connection 0# curl -v http://172.19.0.6:8080/hello-java/greet?username=Java* Hostname was NOT found in DNS cache*   Trying 172.19.0.6...* Connected to 172.19.0.6 (172.19.0.6) port 8080 (#0)> GET /hello-java/greet?username=Java HTTP/1.1> User-Agent: curl/7.35.0> Host: 172.19.0.6:8080> Accept: */*> < HTTP/1.1 200 < Content-Type: text/plain;charset=UTF-8< Content-Length: 10< Date: Wed, 01 Aug 2018 11:34:55 GMT* Server MySpringBootApp is not blacklisted< Server: MySpringBootApp< * Connection #0 to host 172.19.0.6 left intactHello Java问题当客户端添加“Host: hello_java:8080”标头时,标准 spring-boot-starter-web 设置中是否有阻止 Web 服务器为请求提供服务的内容?或者为什么 Web 服务器在这两种情况下表现不同?我该怎么办?
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

经过一些实验,结果是服务名称中的下划线导致了问题。将服务名称更改为没有下划线解决了问题。


查看完整回答
反对 回复 2021-06-23
?
呼如林

TA贡献1798条经验 获得超3个赞

RFC 952 规定“名称”(网络、主机、网关或域名)是从字母 (AZ)、数字 (0-9)、减号 (-) 和句点 ( .)

_ 似乎不是主机名的有效组件。这有点令人困惑,因为我遇到了同样的问题,当我 ping app_server 时它很好,但是当我从 app_server wget 时我收到了错误的请求。

将下划线更改为减号为我修复了它。


查看完整回答
反对 回复 2021-06-23
  • 2 回答
  • 0 关注
  • 204 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信