Wie ich Python OSError: [Errno 99] Cannot assign requested address behoben habe

Problem:

Beim Binden eines Sockets erscheint eine Fehlermeldung wie

bind_error.txt
Traceback (most recent call last):
  File "run.py", line 91, in <module>
    server = start_server(loop, ('192.168.1.100', 8080))
  File "run.py", line 86, in start_server
    transport, server = loop.run_until_complete(t)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1332, in create_datagram_endpoint
    raise exceptions[0]
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1316, in create_datagram_endpoint
    sock.bind(local_address)
OSError: [Errno 99] Cannot assign requested address

Lösung

In meinem Fall bestand das Problem darin, dass ich versuchte, an die spezifische IP-Adresse 192.168.1.100 zu binden, aber der Computer, auf dem das Skript lief, hatte diese IP-Adresse auf keiner Schnittstelle konfiguriert.

docker_bind_note.txt
server = start_server(loop, ('192.168.1.100', 8080))

Daher musste ich die Bind-IP-Adresse entweder auf 0.0.0.0 ändern, um an BELIEBIGE IP-Adressen zu lauschen, oder 192.168.1.100 auf die IP-Adresse des Host-Computers ändern, auf dem das Skript ausgeführt wird.

Docker-Container [Errno 99] Cannot assign requested address

Beachten, dass für Docker-Container entweder network_mode: host verwendet werden muss, um das Netzwerk-Systemd des Hosts zu nutzen, oder an die IP-Adresse des Containers gebunden werden muss. Es ist nicht möglich, aus dem Container an die IP-Adresse des Hosts zu binden, sofern nicht network_mode: host verwendet wird! Aber die Ports können vom Host weitergeleitet werden, wobei an eine spezifische IP-Adresse gebunden wird.


Check out similar posts by category: Python