Hintergrund
ich mehrere Python-Anwendungen haben auf der gleichen Maschine in Docker läuft. Jede Python-Anwendung verwendet twisted
, um Server und Client für die Kommunikation in TCP
zu erstellen. Ports, die jeder Prozess überwacht, sind in einer statischen Datei konfiguriert.TCP-Verbindungsfehler nach Kill + starten Docker Bild
Problem
MANCHMAL, nur manchmal, wenn ich ein oder mehr Docker Bilder neu zu starten (ich benutze docker kill
und docker run
), gibt es eine Chance, ein Port, eine Anwendung, bevor noch getötet verwendet wurde, verwendet wird.
Nach docker run
Befehl würde twisted
Unhandled error in Deferred:
Fehler aus (ohne weitere Details, nur diese Zeile, vielleicht wegen meiner Protokollierung configs), wenn und nur wenn es ein problematisches ist.
Dann verwende ich netstat -ntlp
, um diesen bestimmten Port zu überprüfen, ich finde den Port nicht gehört wird. Und ich versuche nc -l [PORT]
, es gibt Address already in use
zurück. Außerdem verwende ich netstat -a | grep ESTABLISHED
, um herauszufinden, dass einige Prozesse eine TCP-Verbindung zu diesem Port bereits hergestellt haben/haben.
bedeutet, dass ich versucht, dieses Problem zu beheben vorübergehend
- ich die problematischen Docker Bild viele Male neu gestartet, bis es zum Hafen hört.
- Ich tötete andere Docker-Bilder, die zuvor mit dem problematischen Docker-Image kommunizierten, und startete dann alle getöteten Bilder neu.
Was erwartet wird
Ich mag würde wissen, warum diese Situation passiert und wie es zu beheben. Ich möchte nicht jedes Mal, wenn ich meine Docker-Images neu starte, netstat -ntlp
überprüfen.
Umwelt:
OS: Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-53-generic x86_64)
Docker:
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 06:42:29 2017
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 06:42:29 2017
OS/Arch: linux/amd64
Experimental: false
Python: Python 2.7.6
Verdreht: 17.1.0
Es passiert, weil Sie eine Ausnahme nicht behandelt haben und Sie die Details davon aufgrund Ihrer Protokollierungskonfiguration nicht sehen können. –
Logging Arbeit "parallel" auf einer App, so Logger ist Ausnahme (oder was auch immer) Handler kann nicht direkt zu Ihrer App hinzugefügt werden.'kill or stop' benötigt 'von außen nach innen' Richtung, Sie können keinen Thread/Prozess beenden/stoppen, wenn ein externer Thread/Prozess enthalten ist. Erstellen Sie "app loop" ist einfach, aber "app life loop" erforderlich jeden Status + Ereignisse zu überprüfen. – dsgdfg
@KlausD. Ich werde in die Logging-Sache schauen, es wirft nur diese Fehlermeldung nach dem Start eines problematischen Docker-Image. @dsgdfg Meinst du, der Python-Prozess oder die Twisted-TCP-Verbindung wird nicht durch 'docker kill'-Befehl getötet? Wie erklärt man das dann nur gelegentlich? – user4394476