Ist es möglich auf den Docker Container über die IP des Containers zuzugreifen und nicht über die Host IP?
Hallo
Ich mache zurzeit ein Container, auf dem sich MariaDB befindet und ich möchte mit einer SQL Workbench auch auf einem anderen PC(gleiches Netzwerk) auf diesen Container zugreifen. Jedoch geht es bis jetzt nur über die Host IP, aber ich brauche es so, dass man mit der Container IP zugreift. Das geht aber nicht und ich weiss nicht wieso.
Hier ist der Befehl den ich benutzt habe um den Container zu erstellen.
docker run --network dockernetzwerk --ip 192.168.1.1 -p 3306:3306 --name MDBContainerTest mdbdatenbank
Hier versuche ich via HeidiSQL darauf zuzugreifen:
Und hier die Fehlermeldung, dass die Verbindung zum Server fehlgeschlagen ist:
Kann mir da jemand bitte weiter helfen?
3 Antworten
Den docker run Befehl kannst du auch um einiges vereinfachen. Du musst nicht explizit ein Netzwerk und eine IP Adresse angeben. Bei beidem wird ein Wert automatisch zugewiesen.
Das wichtige, dass du benötigst, ist "docker run -p 3306:3306 container-name". Der Parameter "--name" ist für die Funktionalität unwichtig.
Mit dem "-p 3306:3306" Parameter hört die Docker Runtime auf der IP 0.0.0.0 mit 3306 und leitet alles den Datenbank Container auf Port 3306 weiter. Dabei ist es egal, welche IP Adresse du benutzt, um dein PC (nicht den Container) zu erreichen. Das kann lokal 127.0.0.1 oder im privaten Netzwerk die 192.168.x.x sein.
Meines Wissens ist es mit Docker nicht möglich ein Container als eigenständiges System mit eigener IP Adresse im Netzwerk zu veröffentlichen. Der gesamte Traffic wird immer über die/eine IP Adresse vom Host geleitet. Bei virtuellen Maschinen wäre es mit dem Bridged Netzwerkadapter möglich.
Du kannst den Publish Parameter (-p) noch etwas anpassen. Du kannst die lokale Bind Adresse vom Host anpassen. Mit "-p 127.0.0.1:3306:3306" könntest du die Datenbank dann nur per localhost bzw. 127.0.0.1 erreichen. Per 192.168.x.x im privaten Netzwerk wäre keine Kommunikation möglich. Mit der Option kannst du den Zugriff einschränken, aber nicht erweitern.
Die Container IP Adresse ist nur für das interne Docker Netzwerk relevant.
Du musst natürlich den entsprechenden Port (3306) im Router weiterleiten.
Und dann kannst du über deine externeIP:3306 darauf zugreifen.
Alternativ kannst du dir auch einen DynDNS zulegen, und dann mit dieser domain:3306 darauf zugreifen.
Oder du machst es mit einem Reverse-Proxy. Dann kann man den Port am Ende weglassen.
Ich habe deine Frage auch falsch verstanden. Du willst innerhalb des Netzwerks darauf zugreifen .... hab das überlesen und dachte, es ginge von außerhalb.
Warum genau soll es denn die Container-IP sein? Du greifst auch von einem anderem PC aus über die Host-IP:Port auf den Container zu.
Bei dieser Variante bräuchte dann ja jeder ein anderer Port nicht?
Aber ich meine ich muss schluessendlich 30 container oder so haben, alle mit mariadb drauf und dann bräuchte doch jeder ein anderer port wenn ich mit der hostIP zugreife nicht?
Ein Lösung könnte dies sein:
- lege ein bridge device auf dem Host computer an
- bridge die virtuellen interfaces der container und die physikalische NIC des hosts in dieser bridge
- sorge dafür, falls nötig, dass pakete mit Destination virtuelle container interfaces mittels geeigneten Routen zum bridge device geroutet werden.
Die Vorgehensweise entspricht dem Konfigurieren eines gebridgten Netzwerkzugangs von VMs (im Konstrast zu geNATteden bzw geMASQeradeten Zugang eben dieser VMs), und du müsstest die gleichen Anleitungen dafür als Vorlage nehmen können.
ich verstehe das ganze ip zeugs nicht so ganz gut und deswegen weiss ich jetzt auch nicht welche die externeip sein soll