Beim Versuch, den dem Docker-Container zugeordneten Port zu durchsuchen, wird „ERR_CONNECTION_REFUSED“ angezeigt

Beim Versuch, den dem Docker-Container zugeordneten Port zu durchsuchen, wird „ERR_CONNECTION_REFUSED“ angezeigt

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 -pordnet 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.100die 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-machineverwenden Sie den folgenden Befehl, um die IP-Adresse abzurufen (vorausgesetzt, defaultes handelt sich um Ihren Namen):

docker-machine ip default

Sehen:https://docs.docker.com/machine/reference/ip/

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.

Port für Kitematic-Instanzeinstellungen

verwandte Informationen