暂停后无法打开套接字

暂停后无法打开套接字

当我启动计算机时,一切都运行正常,但从暂停状态恢复后,应用程序无法打开新的本地套接字。我的连接和 DNS 都很好。我可以 ping 域。我可以浏览网站,我可以通过 SSH 退出,我可以连接到恢复之前启动的服务。但我无法启动任何想要绑定到新本地套接字的东西。如果我重新启动,一切都会恢复正常,但我必须强制重新启动,因为停止 Tomcat 会停滞在等待网络。

亚行:

adb F 05-03 15:31:03 54241 54241 main.cpp:148] could not install *smartsocket* listener: Address family not supported by protocol

* failed to start daemon
adb: failed to check server version: cannot connect to daemon

雄猫:

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)
        at org.apache.catalina.core.StandardServer.await(StandardServer.java:428)
        at org.apache.catalina.startup.Catalina.await(Catalina.java:800)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:746)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:415)

网络猫:

$ nc -vkl 12345
Listening on 0.0.0.0 12345

$ telnet localhost 12345
Trying 127.0.0.1...

我尝试过重启 network-manager、systemd-udevd、systemd-sysctl 和 docker。但都无济于事。我还比较了ip link|route|addr恢复前后的情况,发现它们是相同的。

我完全不知道问题出在哪里。有什么建议吗?

答案1

我能够解决这个问题。我在 Docker 中运行 haproxy 和 dnsmasq,因此我需要为环回接口分配第二个 ip 并添加名称服务器。我使用 netplan 完成了此操作,如下所示:

network:
  ethernets:
    lo:
      renderer: networkd
      addresses:
        - 10.10.10.10/8
      nameservers:
        addresses:
          - 10.10.10.10

启动时一切正常,但恢复后 lo 仅具有 IP 10.10.10.10,而不是 127.0.0.1。

为了解决这个问题,我在 netplan 中添加了正常 ip,现在一切都按预期运行。

network:
  ethernets:
    lo:
      renderer: networkd
      match:
        name: lo
      addresses:
        - 127.0.0.1/8
        - ::1/128
        - 10.10.10.10/32
      nameservers:
        addresses:
          - 10.10.10.10

我不知道这是否是在 Ubuntu 中执行此操作的最惯用方法,但它对我来说是有效的。

相关内容