Obtendo 'ERR_CONNECTION_REFUSED' ao tentar navegar na porta mapeada para o contêiner Docker

Obtendo 'ERR_CONNECTION_REFUSED' ao tentar navegar na porta mapeada para o contêiner Docker

Eu extraí uma imagem do Docker:

$ docker pull ghost

E execute um contêiner da imagem:

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

Meu entendimento é que o -pswitch mapeará uma porta no host (8080) para uma porta dentro do Docker (2368), para que eu possa acessar o servidor web em execução no Docker, de fora do docker, ou seja, do meu host.

No entanto, quando tento navegar para qualquer um dos seguintes endereços no Chrome, a partir do meu host:

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

Estou tendo o erro a seguir:

This webpage is not available

ERR_CONNECTION_REFUSED

Parece que pode ser um problema de conectividade, e não um problema dentro do contêiner, pois quando inspeciono os processos em execução dentro do contêiner, parece que o NodeJS está em execução:

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

Mas parece que nada está escutando na porta 8080:

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

Também verifiquei e meu firewall do MacOS está desligado.


Não espero uma solução completa aqui, pois sei que as informações que forneci são mínimas.

O que estou pensando é: como alguém resolveria esse problema?

Parece que a porta Docker está inacessível.

Existe alguma maneira de descobrir por que o mapeamento da porta não funcionou? Ou quais portassãosendo exposto pelo Docker? Talvez eu esteja mapeando a porta interna errada?

Ou há alguma outra sugestão geral sobre o que posso estar fazendo de errado aqui?

Responder1

Finalmente descobri como fazer isso funcionar!

Estou executando o Docker no MacOS e usando o 'Docker QuickStart Terminal'.

Acontece que navegar para 'localhost', '127.0.0.1', etc. estava errado, porque parece que o Docker configura seu próprio 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

Quando eu uso o 192.168.99.100, fornecido acima, tudo funciona bem.

Responder2

Para descobrir o endereço IP do contêiner em execução, você pode usar:

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

Responder3

Se você executar o docker, docker-machineuse o seguinte comando para obter o endereço IP (assumindo que defaultseja o seu nome):

docker-machine ip default

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

Responder4

Comecei a brincar com o docker e este é o primeiro problema que encontrei.

Parece que o docker permite especificar se você está usando portas em modos diferentes, como - host, bridge (padrão)

No modo bridge, a janela de encaixe mostra uma mensagem assim que você implanta o ghost - Seu blog agora está disponível emhttp://localhost:2368/mas visitar este URL mostra que a conexão foi recusada.

para corrigir isso você precisa visitar as configurações da instância no kitematic (mais fácil do que usar o console). Vá para a guia nome do host/portas. Crie um mapeamento conforme mostrado na imagem da porta do docker para a porta do host e bingo. agora visite o URL novamente e tudo funcionará conforme o esperado.

Porta de configurações de instância Kitematic

informação relacionada