web-dev-qa-db-fra.com

Obtenir 'err_connection_refuser' lorsque vous essayez de parcourir le port mappé sur le conteneur Docker

J'ai tiré une image Docker:

$ docker pull ghost

Et exécuter un conteneur de l'image:

$ docker run --name test-ghost -p 8080:2368 -d ghost
7d984e974f6a75fe18b3d397b5c8f0a428928a2be9df83f0d61a679aa5f537fc

Ma compréhension est que le -p Le commutateur mappera un port de l'hôte (8080) à un port à l'intérieur de Docker (2368), de sorte que je puisse frapper le serveur Web exécutant dans Docker, à partir de l'extérieur Docker, c'est-à-dire de mon hôte.

Cependant, lorsque j'essaie de naviguer sur l'une des adresses suivantes de Chrome, de mon hôte:

http://localhost:8080/
http://0.0.0.0:8080/
http://127.0.0.1:8080/

Je reçois l'erreur suivante:

This webpage is not available

ERR_CONNECTION_REFUSED

Cela semble être un problème de connectivité, plutôt qu'un problème à l'intérieur du conteneur, comme lorsque j'inspecte les processus d'exécution à l'intérieur du conteneur, il apparaît que Nodejs est en cours d'exécution:

$ docker top test-ghost
UID          PID           PPID      ...  CMD
docker       4290          1028      ...  npm
docker       4324          4290      ...  sh -c node index
docker       4325          4324      ...  node index

Mais il semble que rien n'écoute sur le port 8080:

$ Sudo lsof -n -i4TCP:8080 | grep LISTEN
$

J'ai aussi vérifié et mon pare-feu Macos est éteint.


Je ne m'attends pas à une solution complète ici, car je suis au courant des informations que j'ai données sont minimes.

Ce que je me demande, c'est, comment allumera-t-on pour résoudre un tel problème?

Il semble que le port Docker soit inaccessible.

Existe-t-il une façon de découvrir pourquoi la cartographie du port n'a pas fonctionné? Ou quels ports sont être exposé par Docker? Peut-être que je cartographier le mauvais port interne?

Ou y a-t-il d'autres suggestions générales sur ce que je ferais peut-être mal ici?

7
jonathanconway

Enfin compris comment faire de ce travail!

Je rencontre Docker sur MacOS et en utilisant 'Docker QuickStart Terminal'.

S'avère, naviguant sur 'localhost', "127.0.0.1", etc., était faux, car il ressemble à Docker installe son propre hôte:

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ 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

Quand j'utilise 192.168.99.100, donné ci-dessus, tout fonctionne bien.

8
jonathanconway

Pour connaître l'adresse IP du conteneur d'exécution, vous pouvez utiliser:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myContainerID
1
Paulo Merson

Si vous exécutez Docker avec docker-machine Utilisez la commande suivante pour obtenir l'adresse IP (en supposant que default est votre nom):

docker-machine ip default

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

0
Datageek

Commencé à jouer avec Docker et c'est le premier problème/problème que j'ai rencontré.

On dirait que Docker vous permet de spécifier si vous utilisez des ports dans différents modes tels que - hôte, pont (par défaut)

Dans le mode Bridge Mode Docker vous indique un message une fois que vous déployez Ghost - votre blog est maintenant disponible sur http: // localhost: 2368 / mais visitant cette URL affiche la connexion refusée.

pour résoudre ce problème, vous devez visiter les paramètres d'instance dans Kitematic (plus facile, puis à l'aide de la console). Aller à l'onglet HostName/Ports. Créez un mappage comme indiqué dans l'image du port Docker vers le port hôte et le bingo. Visitez maintenant l'URL à nouveau et tout fonctionne comme prévu.

Port de paramètres d'instance Kitematic

0
Gautam