Docker versteckt den Port auf MacOS

404
Dariusz Mydlarz

Hier ist die Geschichte. Ich habe eine (Scala) -Anwendung, die in einem Docker ausgeführt wird und docker-compose.ymlwie folgt definiert ist :

app: image: dmydlarz/foobar ports: - "9000:9000" 

Wenn es mit Docker beginnt, lauscht es an Ports nach lsof -PiTCP -sTCP:LISTEN:

com.docke 631 darek 25u IPv4 0xd4ed8c6c9c16c231 0t0 TCP *:9000 (LISTEN) com.docke 631 darek 26u IPv6 0xd4ed8c6c9c20bae9 0t0 TCP localhost:9000 (LISTEN) 

Wie Sie sehen können, hört es sowohl auf Ip4 als auch auf Ip6 zu.

Wenn ich nun meine Anwendung von der Kommandozeile / IntelliJ aus ausführe, wird sie erfolgreich gestartet und hört auch auf Port 9000 (!).

Wenn ich offene Ports aufliste, habe ich Folgendes:

com.docke 631 darek 25u IPv4 0xd4ed8c6c9c16c231 0t0 TCP *:9000 (LISTEN) com.docke 631 darek 26u IPv6 0xd4ed8c6c9c20bae9 0t0 TCP localhost:9000 (LISTEN) java 53995 darek 249u IPv6 0xd4ed8c6c7ec3d8e9 0t0 TCP localhost:9000 (LISTEN) 

3 Prozesse warten auf Port 9000, 2 auf demselben Protokoll Ip6.

In einem solchen Setup bedient die Dockeranwendung immer Anforderungen. Bedeutet immer für alle URLs, die ich ausprobiert habe:

  • curl http://[::1]:9000/...
  • curl http://127.0.0.1:9000/...
  • curl http://localhost:9000/...

Wenn ich die Andockanwendung töte, werden Anforderungen von der lokalen App bedient.

Ich habe die Docker-Anwendung gezwungen, nur auf Ip4 mit der angegebenen Bindungsadresse zu starten:

app: image: dmydlarz/foobar ports: - "127.0.0.1:9000:9000" 

die verhindern, dass zwei Prozesse gleichzeitig gestartet werden, aber das bisherige Verhalten ist für mich völlig umständlich.


Ich habe also 2 Fragen:

  1. Warum versteckt Docker den Port auf einem lokalen Computer? Warum wird das Starten der lokalen App am selben Port nicht blockiert, und Anfragen können abgestellt werden, wenn die Docker-App beendet wird?
  2. Warum konnte ich 2 Anwendungen mit demselben Protokoll (IP6) und demselben Port starten?
0

0 Antworten auf die Frage