我昨天还在运行的系统现在遇到了问题。从那时起,我并没有做太多改变。但是,现在每当我尝试启动使用 127.0.0.1 作为 IP 地址的程序时,都会出现错误。例如:
user@server:~# tcpserver 127.0.0.1 8080 echo
tcpserver: fatal: unable to bind: address not available
并且一个 Java 应用程序(我真正尝试启动的应用程序)引发此错误:
java.net.BindException: Cannot assign requested address (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at
java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
如果我使用 0.0.0.0 或分配给 eth0 的 ip 地址,则相同的 tcpserver 调用会起作用,但指定 127.0.0.1 时则不起作用。
我已经仔细查看了所有日志,但并没有发现任何值得注意ifconfig -a
的地方。输出如下,以防万一。我尝试过ifdown lo; ifup lo
,甚至ifup lo --force
- 但这些似乎都没有任何区别。我也重启了服务器几次,但没有成功。我还尝试过,rm -rf /var/run/network/*
然后又重启了一次(每https://serverfault.com/a/672217/262491),但也没有运气。netstat -ano
显示在端口 8080 上没有任何监听,在 127.0.0.1 上也没有任何监听。
user@server:~# ifconfig -a
eth0 Link encap:Ethernet HWaddr <redacted>
inet addr:10.252.2.169 Bcast:10.252.2.255 Mask:255.255.255.0
inet6 addr: <redacted>/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1
RX packets:18970 errors:0 dropped:0 overruns:0 frame:0
TX packets:17158 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4514198 (4.5 MB) TX bytes:4194402 (4.1 MB)
lo Link encap:Local Loopback
LOOPBACK MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
在 /etc/网络/接口:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# Source interfaces
# Please check /etc/network/interfaces.d before changing this file
# as interfaces may have been defined in /etc/network/interfaces.d
# NOTE: the primary ethernet device is defined in
# /etc/network/interfaces.d/eth0
# See LP: #1262951
source /etc/network/interfaces.d/*.cfg
我将上面的 ifconfig 与正常运行的系统进行了比较,看起来此错误的根本原因可能是环回适配器似乎没有分配 127.0.0.1。所以问题是 - 这怎么可能?我该如何修复它?
答案1
据传这是 ubuntu 14.04 (~May 2017) 的 AWS AMI 的一个已知问题。修复方法是重新启动直到你幸运或通过类似以下方式手动分配 IP 地址:ifup lo; ip addr add 127.0.0.1/8 dev lo
当它发生时。