【发布时间】:2020-02-29 11:42:38
【问题描述】:
我在 CentOS-8 上并且有几个 spring-boot 服务:demo-client 通过 spring RestTemplate 在 HTTP 上调用 demo-server。这在没有 Docker 容器的情况下工作正常。 但是当我将它们部署为具有默认网络的 docker-compose 时,演示客户端无法调用演示服务器。我尝试使用服务名称和容器的 IP 地址,但在两种情况下都出现相同的错误:
演示客户端_1 | 2020-02-29 10:23:55.165 错误 1 --- [nio-8082-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]:Servlet.service() 用于 servlet [dispatcherServlet] path [] 抛出异常 [请求处理失败;嵌套异常是 org.springframework.web.client.ResourceAccessException:**“http://172.24.0.2:8081/hello”的 GET 请求出现 I/O 错误:主机无法访问(主机无法访问);** 嵌套异常是java.net.NoRouteToHostException: Host is unreachable (Host unreachable)] 根本原因 演示客户端_1 | 演示客户端_1 | java.net.NoRouteToHostException:主机不可达(主机不可达) 演示客户端_1 |在 java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_212] 演示客户端_1 |在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_212]*Docker 撰写文件:
docker-compose.yml:
version: '3'
services:
demo-client:
build: ./demo-client
ports:
- "8082:8082"
depends_on:
- demo-server
demo-server:
build: ./demo-server
ports:
- "8081:8081"
我尝试按照之前一些帖子中的建议执行与防火墙相关的操作:
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --reload
service firewalld restart*
这些都不起作用。我认为是直截了当的事情结果变得更加复杂。
【问题讨论】:
-
在使用防火墙之前,请将其重置为默认值并尝试缩小可能性。连接到客户端应用程序并 ping 应用程序,然后尝试卷曲它。使用
docker exec -ti YOUR_CONTAINER sh连接到它。 -
您应该能够从
demo-client连接到demo-server,使用demo-server作为主机名;您不需要更改docker-compose.yml或更改主机防火墙设置。还要仔细检查服务器是否正在侦听 0.0.0.0:8081(“所有接口”)而不是 127.0.0.1:8081(“仅限容器私有 localhost 接口”)。 -
@DavidMaze 我该如何检查:还要仔细检查服务器是否正在监听 0.0.0.0:8081(“所有接口”)而不是 127.0.0.1:8081(“容器私有仅限本地主机接口”)。 *** 我在“docker ps”结果中看到这个:a64a617f0841 explore_demo-client “java -jar /app.jar” 8 分钟前 7 分钟前 0.0.0.0:8082->8082/tcp explore_demo-client_1 2ae0a4e75933 explore_demo-server “ java -jar /app.jar" 8 分钟前 8 分钟前 0.0.0.0:8081->8081/tcp explore_demo-server_1
-
@davidxxx: 你好,我可以 ping 两个容器:
[user@localhost explore]$ docker exec -ti 88a10e840cf0 sh '/# ping demo-server PING demo -server (172.27.0.2): 56 data bytes 64 bytes from 172.27.0.2: seq=0 ttl=64 time=0.137 ms[user@localhost explore]$ docker exec -ti fcad3882f0e3 sh / # ping demo-client PING demo-client (172.27.0.3): 56 个数据字节 64 个字节来自 172.27.0.3: seq=0 ttl=64 time=0.113 ms 64 个字节来自 172.27.0.3: seq=1 ttl=64 time=0.112毫秒 -
这似乎是 CentOS-8 的问题。相同的代码在 CentOS-7 上运行良好。
标签: docker docker-compose containers