You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat部署FTP下载代码抛出UnknownHostException(IP地址)问题咨询

解决Tomcat部署后FTP连接抛出UnknownHostException(IP地址场景)

嘿,这个问题确实挺让人困惑的——毕竟你用的是纯IP地址而非主机名,按常理不该触发UnknownHostException对吧?结合你描述的现象(命令行、本地运行都正常,仅Tomcat部署后出错),我整理了几个高概率的排查方向和解决思路:

1. 检查Tomcat运行用户的网络权限

很多服务器上Tomcat会用专门的系统用户(比如Linux下的tomcat用户)运行,这个用户可能被限制了网络访问权限:

  • 尝试切换到Tomcat用户身份,执行ping命令测试连通性:
    sudo -u tomcat ping 192.168.1.9
    
    如果ping不通,说明该用户没有访问目标IP的权限,需要调整服务器的用户权限或网络策略。

2. 排查服务器防火墙/路由规则

虽然你用当前命令行用户能访问,但Tomcat的运行环境可能受不同的防火墙规则约束:

  • 检查服务器的防火墙(比如Linux的firewalld/iptables,Windows的防火墙),确认是否允许Tomcat进程访问目标IP的FTP端口(默认21);
  • 查看服务器路由表,确认目标网段192.168.1.x在可达范围内:
    # Linux
    route -n
    # Windows
    route print
    
    如果路由表中没有对应网段的条目,需要添加静态路由。

3. 清除Java的地址解析缓存

Java会缓存DNS解析结果,哪怕是IP地址,也可能因为之前的错误缓存导致异常:

  • 可以在代码中添加一行强制清除缓存的代码:
    java.net.InetAddress.clearCachedAddresses();
    
  • 或者直接重启Tomcat,让JVM的缓存失效;
  • 另外检查JVM启动参数是否设置了networkaddress.cache.negative.ttl(负缓存时长),如果值过大,会保留错误的解析结果,建议调整为较短时间(比如60秒)。

4. 验证代码的配置读取逻辑

虽然本地运行正常,但部署到Tomcat后可能读取了错误的配置:

  • 在代码中添加日志,打印实际用于连接的FTP地址,确认是不是预期的192.168.1.9(比如有没有被误加空格、特殊字符);
  • 检查Tomcat是否配置了全局代理(比如启动参数中的http.proxyHost),如果代理无法访问内网IP,会导致连接失败。

快速验证步骤

优先做最容易排查的:

  1. 切换到Tomcat用户ping目标IP,确认连通性;
  2. 重启Tomcat,排除缓存问题;
  3. 打印代码中的FTP地址,确认配置正确。

内容的提问来源于stack exchange,提问作者manugarciac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:09:17