Tomcat部署FTP下载代码抛出UnknownHostException(IP地址)问题咨询
解决Tomcat部署后FTP连接抛出UnknownHostException(IP地址场景)
嘿,这个问题确实挺让人困惑的——毕竟你用的是纯IP地址而非主机名,按常理不该触发UnknownHostException对吧?结合你描述的现象(命令行、本地运行都正常,仅Tomcat部署后出错),我整理了几个高概率的排查方向和解决思路:
1. 检查Tomcat运行用户的网络权限
很多服务器上Tomcat会用专门的系统用户(比如Linux下的tomcat用户)运行,这个用户可能被限制了网络访问权限:
- 尝试切换到Tomcat用户身份,执行ping命令测试连通性:
如果ping不通,说明该用户没有访问目标IP的权限,需要调整服务器的用户权限或网络策略。sudo -u tomcat ping 192.168.1.9
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,会导致连接失败。
快速验证步骤
优先做最容易排查的:
- 切换到Tomcat用户ping目标IP,确认连通性;
- 重启Tomcat,排除缓存问题;
- 打印代码中的FTP地址,确认配置正确。
内容的提问来源于stack exchange,提问作者manugarciac
相关产品推荐
相关产品推荐

