1. 程式人生 > 其它 >[Tomcat/Java EE/Linux]Tomcat啟動異常:StandardServer.await: create[localhost:8005]: java.net.BindException: 無法指定被請求的地址

[Tomcat/Java EE/Linux]Tomcat啟動異常:StandardServer.await: create[localhost:8005]: java.net.BindException: 無法指定被請求的地址

1 問題背景

  • 部門新成員小J在一臺虛擬機器(ip:192.168.191.96)內安裝部署部門的資料治理產品(含: 20餘個微服務模組 + 1套(使用者)基礎管理系統BMS)。
  • 小J啟動BMS的Tomcat時,屢次報此錯:StandardServer.await: create[localhost:8005]: java.net.BindException: 無法指定被請求的地址
嚴重: StandardServer.await: create[localhost:8005]:
java.net.BindException: 無法指定被請求的地址
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:382)
    at java.net.ServerSocket.bind(ServerSocket.java:375)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at org.apache.catalina.core.StandardServer.await(StandardServer.java:444)
    at org.apache.catalina.startup.Catalina.await(Catalina.java:781)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:727)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:4
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)

2 原因分析

create[localhost:8005]:入手,可分析出2類情況:

  • 情況1(埠角度):8005 埠是否被佔用 (排查結論:8005埠未被佔用)
  • 情況2(域名角度): localhost 域名是否解析正確 (結論: localhost 域名解析錯誤;hosts檔案中無localhost的ip與域名的對映配置)
    未修正localhost的域名IP對映配置前:↓
然後,查看了一下**hosts**檔案,確實沒有配置host的域名對映,說明了:這裡`ping`出來的的`localhosts`的`ip`是虛擬機器所處網路的更上一級(乃至更上上一級網路)網路的DNS伺服器解析出的IP地址。

已修正localhost的域名IP對映配置後:↓

3 解決方法

  • step1 修改 hosts檔案中 localhost 域名的IP對映配置
vi /etc/hosts
  192.168.191.96 localhost
  (或: 127.0.0.1 localhosts)
  • step2 重啟 tomcat 即可

X 參考文獻