Docker启动容器报错: connect: no route to host

本文介绍了一种常见的Docker容器间网络连接问题,即API容器无法连接到正常运行的MySQL容器。通过分析错误日志,确定了问题是由于防火墙阻止了容器间的通信。文章提供了具体的解决方案,包括修改防火墙规则以允许特定IP地址范围内的通信,并重启防火墙服务,最终成功解决了容器间的网络连接问题。

前言

笔者在重启了Docker服务后,发现其中一个api容器起不来了,这个容器在内部链接了另外一个MySQL容器,而那个MySQL容器是已经正常运行了。笔者通过docker logs container查看api容器启动日志,发现了这个错误:

[ORM]2018/10/31 09:05:36 register db Ping `default`, dial tcp 192.168.1.54:3306: connect: no route to host
2018/10/31 09:05:36.636 [E] [command.go:54] 注册默认数据库失败: register db Ping `default`, dial tcp 192.168.1.54:3306: connect: no route to host

解决方案

通过在防火墙配置文件的增加一条规则,此问题得以解决,规则如下:

<rule family="ipv4">
     <source address="172.17.0.0/16"/>
     <accept/>
 </rule>

其中address部分改为自己机器docker0网卡的ip地址,然后将规则加入防火墙配置:

[root@template-centos7 /root]#cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected inco
ming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <rule family="ipv4">
       <source address="172.17.0.1/16"/>
       <accept/>
  </rule>
</zone>

然后重启防火墙:

[root@template-centos7 /root]#systemctl restart firewalld.service

然后该容器就可以正常启动了,问题解决。

注意,如果防火墙会影响api服务的访问,做完这些操作时请记得停止防火墙服务;笔者在这里就给自己挖了一个坑,导致后台无法访问api,把防火墙停掉即可。

参考链接:https://forums.docker.com/t/no-route-to-host-network-request-from-container-to-host-ip-port-published-from-other-container/39063/6

### Maven No Route to Host 错误解决方案 #### 一、理解错误根源 Java应用程序尝试建立网络连接时遇到`java.net.NoRouteToHostException: No route to host (Host unreachable)`表明客户端与目标服务器之间不存在有效的通信路径[^1]。 #### 二、排查思路 对于Maven构建过程中出现此类问题的情况,需考虑多方面因素: - **容器内外网路连通性**:如果是在Docker环境中运行Jenkins并调用Maven,则可能存在宿主机与目的机器间的路由不通或是容器自身的网络设置不当引起的问题[^3]。 - **DNS解析及HOSTS配置准确性**:确保所有涉及的服务名称能够被正确解析为目标IP地址,并且这些IP指向的是可到达的目的地。特别是当使用自定义域名(如Nexus仓库)时更要注意这一点。 #### 三、具体操作建议 ##### 修改或添加/etc/hosts记录 针对特定环境下的私有库访问失败情况,可以通过编辑Linux系统的`/etc/hosts`文件来指定正确的映射关系。例如: ```bash echo "10.x.x.161 nexus.tongtech.top" >> /etc/hosts ``` ##### 测试基本网络功能 利用简单的命令验证基础的可达性和延迟状况: ```bash ping -c 4 nexus.tongtech.top traceroute nexus.tongtech.top ``` ##### 配置防火墙规则 虽然有时为了简化部署会选择关闭防火墙,但在生产环境中还是推荐开启必要的防护措施的同时允许合法流量通过。可以检查现有策略是否阻止了所需端口的数据包传输。 ##### 调整IDEA或其他开发工具设置 如果是从IntelliJ IDEA发起的操作遇到了此异常,那么可能还需要关注IDE本身的代理设定以及插件兼容性等问题[^4]。 ##### 查看日志详情 深入研究应用层面的日志输出有助于定位具体的失败环节。比如,在上述堆栈跟踪信息中提到的具体类和方法可以帮助缩小范围至某一层级的实现细节[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值