2017-09-21 1 views
0

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 twistedUnhandled 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

  1. ich die problematischen Docker Bild viele Male neu gestartet, bis es zum Hafen hört.
  2. 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

+0

Es passiert, weil Sie eine Ausnahme nicht behandelt haben und Sie die Details davon aufgrund Ihrer Protokollierungskonfiguration nicht sehen können. –

+0

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

+0

@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

Antwort

0

Zunächst das Offensichtliche, haben Sie versucht, die folgende,

Wenn es auch nicht funktioniert, versuchen Sie es als letzten Ausweg.

docker kill --signal=SIGKILL <container name> 
+0

Ich werde es versuchen. Da diese Situation gelegentlich auftritt, brauche ich vielleicht etwas Zeit zum Beobachten. Vielen Dank und hoffentlich würde mir diese Antwort helfen. Wahrscheinlich muss ich die Dokumente von Docker ein bisschen mehr überarbeiten. – user4394476