2017-11-13 4 views
0

Ich habe Docker Container für Experimente. Daher weiß ich nicht, welche Ports ich später verwenden werde, wenn ich neue Apps ausprobiere. Ist es nicht möglich, mit dem ip/port auf den docker container application zuzugreifen, ohne ihn im docker-run-Befehl anzuzeigen?Docker Access Container IP/Port direkt

+0

Im Grunde wollen Sie in Laufbehälter rechts neuen Hafen entlarven? Hier ist die entsprechende Diskussion im Dockerforum. Ich habe einige von ihnen ausprobiert und finde sie gut. https://forums.docker.com/t/how-to-expose-port-on-running-container/3252/14 – Apolozeus

Antwort

0

Update: das OP nicht bieten, dass es über docker-for-mac in der ursprünglichen Frage war, so kann der Rest nicht angewendet werden, wenn Sie diese Version von Docker verwenden.


Ursprüngliche Antwort:

Ja, können Sie das tun.

Nehmen wir an, Sie haben einen Container namens boring_pare und eine Webanwendung, die auf Port 8080 ausgeführt wird. Sie können auf von Ihrem Host-Computer zugreifen, indem Sie http://[ip_of_boring_pare]:8080 anfordern. Wenn Sie das Standard-Andocknetzwerk verwenden, befindet sich diese IP-Adresse wahrscheinlich im Bereich 172.17.0.xxx.

diese IP zu finden, können Sie Ihre Behälter unter Verwendung inspect können:

docker container inspect boring_pare 

Auch erwähnen Sie:

Ist es nicht möglich, mit IP-Docker-Container-Anwendung zugreifen/Port vom Host ohne ausgesetzt es in den Docker-run-Befehl?

Der korrekte Begriff hier wäre Veröffentlichung. Weiterführende Literatur:

  • Documentation über EXPOSE/Dockerfile

    ... Die EXPOSE Anweisung veröffentlichen nicht wirklich den Hafen. Es fungiert als eine Art Dokumentation zwischen der Person, die das Image erstellt, und der Person, die den Container ausführt, über welche Ports veröffentlicht werden sollen. Um den Port bei der Ausführung des Containers tatsächlich zu veröffentlichen, verwenden Sie das Flag -p unter docker run, um einen oder mehrere Ports zu veröffentlichen und zuzuordnen, oder das Flag -P, um alle exponierten Ports zu veröffentlichen und sie den Ports höherer Ordnung zuzuordnen.

  • Difference between “expose” and “publish” in docker


aktualisieren-@robie2011 ‚s Kommentar zu beantworten:

Unten laufen I 3 Befehle:

  1. betreiben ein nginx Behälter ohne port 80 zu einem host Port Veröffentlichung
  2. seine inspizieren ip address
  3. Verwendung curl von host für den Zugriff auf die nginx Startseite

Meine Konsolenausgabe:

$ docker run --rm --name some-nginx -d nginx 
0e53d3b5ef6d65a4731c4066f3523c5ecd3c118abedae44b33e89fdf8e401632 

$ docker container inspect --format '{{ .NetworkSettings.IPAddress }}' some-nginx 
172.17.0.3 

$ curl 172.17.0.3 
<!DOCTYPE html> 
<html> 
<head> 
<title>Welcome to nginx!</title> 
<style> 
    body { 
     width: 35em; 
     margin: 0 auto; 
     font-family: Tahoma, Verdana, Arial, sans-serif; 
    } 
</style> 
</head> 
<body> 
<h1>Welcome to nginx!</h1> 
<p>If you see this page, the nginx web server is successfully installed and 
working. Further configuration is required.</p> 

<p>For online documentation and support please refer to 
<a href="http://nginx.org/">nginx.org</a>.<br/> 
Commercial support is available at 
<a href="http://nginx.com/">nginx.com</a>.</p> 

<p><em>Thank you for using nginx.</em></p> 
</body> 
</html> 
$ 
+0

Hat in meinem Fall nicht funktioniert. Hier zwei Beispiele: 'docker run --name some-nginx -d nginx' hier ist der beweis, dass dies auf port 80 funktionieren sollte ' docker run -p9999: 80 --name einige-nginx2 -d nginx' – robie2011

+0

@ robie2011 I am Ende meiner Antwort hinzugefügt die Ergebnisse, die ich bekomme, wenn ich 'curle' von' Host' in den 'container' von Ihrem ersten Befehl ausgeführt. – tgogos

+0

Ich folgte deinen Schritten, aber es funktionierte nicht für mich. Im mit Macosx und haben folgende Laufzeit https://pastebin.com/q866LHRc vielleicht ist es ein Mac-Problem? – robie2011