GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Leiten Sie den Host-Port an den Docker-Container weiter

Wie in einem der Kommentare angegeben, funktioniert dies für Mac (wahrscheinlich auch für Windows/Linux):

ICH MÖCHTE VON EINEM CONTAINER ZU EINEM DIENST AUF DEM HOST VERBINDEN

Der Host hat eine sich ändernde IP-Adresse (oder keine, wenn Sie keinen Netzwerkzugriff haben). Wir empfehlen Ihnen, sich mit dem speziellen DNS-Namen host.docker.internal zu verbinden die in die vom Host verwendete interne IP-Adresse aufgelöst wird. Dies dient Entwicklungszwecken und funktioniert nicht in einer Produktionsumgebung außerhalb von Docker Desktop für Mac.

Sie können das Gateway auch mit gateway.docker.internal erreichen .

Zitiert von https://docs.docker.com/docker-for-mac/networking/

Das hat bei mir funktioniert, ohne --net=host zu verwenden .


Ein einfacher, aber relativ unsicherer Weg wäre die Verwendung von --net=host Option auf docker run .

Diese Option bewirkt, dass der Container den Netzwerkstapel des Hosts verwendet. Dann können Sie sich mit Diensten verbinden, die auf dem Host ausgeführt werden, indem Sie einfach "localhost" als Hostnamen verwenden.

Dies ist einfacher zu konfigurieren, da Sie den Dienst nicht so konfigurieren müssen, dass er Verbindungen von der IP-Adresse Ihres Docker-Containers akzeptiert, und Sie müssen dem Docker-Container nicht nur eine bestimmte IP-Adresse oder einen bestimmten Hostnamen mitteilen, zu dem eine Verbindung hergestellt werden soll ein Port.

Sie können es zum Beispiel testen, indem Sie den folgenden Befehl ausführen, der davon ausgeht, dass Ihr Bild my_image heißt , enthält Ihr Bild den telnet und der Dienst, zu dem Sie sich verbinden möchten, befindet sich auf Port 25:

docker run --rm -i -t --net=host my_image telnet localhost 25

Wenn Sie erwägen, dies auf diese Weise zu tun, lesen Sie bitte den Sicherheitshinweis auf dieser Seite:

https://docs.docker.com/articles/networking/

Es heißt:

--net=host – Weist Docker an, das Platzieren des Containers in einem separaten Netzwerkstapel zu überspringen. Im Wesentlichen weist diese Auswahl Docker an, das Netzwerk des Containers nicht zu containerisieren! Während Container-Prozesse immer noch auf ihr eigenes Dateisystem und ihre eigenen Prozesslisten- und Ressourcengrenzen beschränkt sind, zeigt Ihnen ein schneller ip addr-Befehl, dass sie netzwerkmäßig „außerhalb“ im Haupt-Docker-Host leben und vollen Zugriff auf seine Netzwerkschnittstellen haben . Beachten Sie, dass der Container dadurch den Host-Netzwerkstapel nicht neu konfigurieren kann – das würde --privileged=true erfordern – aber Container-Prozesse lassen Ports mit niedrigen Nummern wie jeden anderen Root-Prozess öffnen. Es ermöglicht dem Container auch den Zugriff auf lokale Netzwerkdienste wie D-Bus. Dies kann dazu führen, dass Prozesse im Container unerwartete Dinge tun können, z. B. den Computer neu starten. Sie sollten diese Option mit Vorsicht verwenden.


Ihr Docker-Host stellt allen Containern einen Adapter zur Verfügung. Angenommen, Sie verwenden ein aktuelles Ubuntu, können Sie

ausführen
ip addr

Dadurch erhalten Sie eine Liste von Netzwerkadaptern, von denen einer in etwa so aussieht

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 22:23:6b:28:6b:e0 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a402:65ff:fe86:bba6/64 scope link
   valid_lft forever preferred_lft forever

Sie müssen Rabbit/Mongo mitteilen, dass es sich an diese IP (172.17.42.1) binden soll. Danach sollten Sie in Ihren Containern Verbindungen zu 172.17.42.1 öffnen können.


Linux
  1. Einige DOCKER-Befehle

  2. Eine Einführung in Docker

  3. Wie man ein Host-Verzeichnis in einen Docker-Container einbindet

  4. So beenden Sie einen Docker-Container

  5. So greifen Sie vom Host auf den Netzwerk-Namespace des Docker-Containers zu

So stellen Sie eine Verbindung zu Localhost in einem Docker-Container her

So erhalten Sie die IP-Adresse eines Docker-Containers vom Host

So kopieren Sie Dateien zwischen Host und Docker-Container

So führen Sie SSH in einen Docker-Container ein

So verwalten Sie Docker-Container

Einen NFS-Mount auf dem Host sichtbar machen und im Docker-Container lesen und schreiben