Ich habe ein Docker-Image gezogen:
$ docker pull ghost
Und führen Sie einen Container aus dem Image aus:
$ docker run --name test-ghost -p 8080:2368 -d ghost
7d984e974f6a75fe18b3d397b5c8f0a428928a2be9df83f0d61a679aa5f537fc
Nach meinem Verständnis -p
ordnet der Switch einen Port auf dem Host (8080) einem Port innerhalb von Docker (2368) zu, sodass ich von außerhalb von Docker, also von meinem Host, auf den innerhalb von Docker laufenden Webserver zugreifen kann.
Wenn ich jedoch versuche, in Chrome von meinem Host aus zu einer der folgenden Adressen zu navigieren:
http://localhost:8080/
http://0.0.0.0:8080/
http://127.0.0.1:8080/
Ich erhalte die folgende Fehlermeldung:
This webpage is not available
ERR_CONNECTION_REFUSED
Es scheint sich eher um ein Verbindungsproblem als um ein Problem innerhalb des Containers zu handeln, denn wenn ich die laufenden Prozesse im Container überprüfe, sieht es so aus, als ob NodeJS ausgeführt wird:
$ docker top test-ghost
UID PID PPID ... CMD
docker 4290 1028 ... npm
docker 4324 4290 ... sh -c node index
docker 4325 4324 ... node index
Aber es scheint, als würde auf Port 8080 nichts lauschen:
$ sudo lsof -n -i4TCP:8080 | grep LISTEN
$
Ich habe auch nachgesehen und meine MacOS-Firewall ist ausgeschaltet.
Ich erwarte hier keine vollständige Lösung, da mir bewusst ist, dass die von mir bereitgestellten Informationen minimal sind.
Ich frage mich, wie man ein solches Problem beheben könnte.
Es scheint, dass auf den Docker-Port nicht zugegriffen werden kann.
Gibt es eine Möglichkeit herauszufinden, warum die Portzuordnung nicht funktioniert hat? Oder welche PortsSindvon Docker freigegeben? Vielleicht ordne ich den falschen internen Port zu?
Oder gibt es noch andere allgemeine Vorschläge, was ich hier falsch machen könnte?
Antwort1
Endlich herausgefunden, wie das funktioniert!
Ich führe Docker unter MacOS aus und verwende „Docker QuickStart Terminal“.
Es stellte sich heraus, dass die Navigation zu „localhost“, „127.0.0.1“ usw. falsch war, da es so aussieht, als würde Docker seinen eigenen Host einrichten:
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com
Wenn ich 192.168.99.100
die oben angegebenen Anweisungen verwende, funktioniert alles einwandfrei.
Antwort2
Um die IP-Adresse des laufenden Containers herauszufinden, können Sie Folgendes verwenden:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myContainerID
Antwort3
Wenn Sie Docker ausführen, docker-machine
verwenden Sie den folgenden Befehl, um die IP-Adresse abzurufen (vorausgesetzt, default
es handelt sich um Ihren Namen):
docker-machine ip default
Antwort4
Ich habe angefangen, mit Docker zu spielen, und dies ist das erste Problem/Problem, auf das ich gestoßen bin.
Anscheinend lässt Docker Sie angeben, ob Sie Ports in verschiedenen Modi verwenden, z. B. Host, Bridge (Standard).
Im Bridge-Modus zeigt Ihnen Docker eine Meldung an, sobald Sie Ghost bereitstellen - Ihr Blog ist jetzt verfügbar aufhttp://localhost:2368/aber beim Besuch dieser URL wird die Verbindung abgelehnt.
Um dies zu beheben, müssen Sie die Instanzeinstellungen in Kitematic aufrufen (einfacher als die Verwendung der Konsole). Gehen Sie zur Registerkarte Hostname/Ports. Erstellen Sie eine Zuordnung wie im Bild gezeigt vom Docker-Port zum Host-Port und Bingo. Besuchen Sie jetzt die URL erneut und alles funktioniert wie erwartet.