Obteniendo 'ERR_CONNECTION_REFUSED' al intentar explorar el puerto asignado al contenedor Docker

Obteniendo 'ERR_CONNECTION_REFUSED' al intentar explorar el puerto asignado al contenedor Docker

Saqué una imagen de Docker:

$ docker pull ghost

Y ejecuta un contenedor desde la imagen:

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

Tengo entendido que el -pconmutador asignará un puerto en el host (8080) a un puerto dentro de Docker (2368), de modo que pueda acceder al servidor web que se ejecuta dentro de Docker, desde fuera de Docker, es decir, desde mi host.

Sin embargo, cuando intento navegar a cualquiera de las siguientes direcciones en Chrome, desde mi host:

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

Obtuve el siguiente error:

This webpage is not available

ERR_CONNECTION_REFUSED

Parece que podría ser un problema de conectividad, en lugar de un problema dentro del contenedor, ya que cuando inspecciono los procesos en ejecución dentro del contenedor, parece que NodeJS se está ejecutando:

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

Pero parece que no hay nada escuchando en el puerto 8080:

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

También lo verifiqué y mi firewall de MacOS está desactivado.


No espero una solución completa aquí, ya que soy consciente de que la información que he proporcionado es mínima.

Lo que me pregunto es, ¿cómo se podría solucionar ese problema?

Parece que no se puede acceder al puerto Docker.

¿Hay alguna forma de averiguar por qué no funcionó la asignación de puertos? O que puertosson¿Está siendo expuesto por Docker? ¿Quizás estoy asignando el puerto interno incorrecto?

¿O hay alguna otra sugerencia general sobre lo que podría estar haciendo mal aquí?

Respuesta1

¡Finalmente descubrí cómo hacer que esto funcione!

Estoy ejecutando Docker en MacOS y usando 'Docker QuickStart Terminal'.

Resulta que navegar a 'localhost', '127.0.0.1', etc. fue incorrecto, porque parece que Docker configura su propio host:

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

Cuando uso 192.168.99.100, como se indicó anteriormente, todo funciona bien.

Respuesta2

Para averiguar la dirección IP del contenedor en ejecución, puede utilizar:

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

Respuesta3

Si ejecuta Docker con docker-machineuse el siguiente comando para obtener la dirección IP (suponiendo que defaultsea su nombre):

docker-machine ip default

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

Respuesta4

Comencé a jugar con Docker y este es el primer problema que encontré.

Parece que la ventana acoplable le permite especificar si está utilizando puertos en diferentes modos, como host, puente (predeterminado)

En el modo puente, la ventana acoplable le muestra un mensaje una vez que implementa Ghost: su blog ahora está disponible enhttp://localhost:2368/pero al visitar esta URL se muestra que la conexión fue rechazada.

Para solucionar este problema, debes visitar la configuración de la instancia en kitematic (es más fácil que usar la consola). Vaya a la pestaña nombre de host/puertos. Cree una asignación como se muestra en la imagen desde el puerto acoplable hasta el puerto host y bingo. Ahora visite la URL nuevamente y todo funciona como se esperaba.

Puerto de configuración de instancia de Kitematic

información relacionada