Wie ich Python OSError: [Errno 99] Cannot assign requested address behoben habe
Problem:
Beim Binden eines Sockets erscheint eine Fehlermeldung wie
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 addressLö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.
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.