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

6

Eu tirei 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 a opção -p mapeará uma porta no host (8080) para uma porta dentro do Docker (2368), para que eu possa acessar o servidor da Web em execução no Docker, a partir do Docker externo, ou seja, do meu host.

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

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

Eu recebo o seguinte erro:

This webpage is not available

ERR_CONNECTION_REFUSED

Isso parece ser um problema de conectividade, em vez de 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á desativado.

Eu não espero uma solução completa aqui, já que estou ciente de que as informações que eu forneci são mínimas.

O que eu estou querendo saber é como um problema seria resolvido?

Parece que a porta do Docker está inacessível.

Existe alguma maneira de descobrir por que o mapeamento de portas não funcionou? Ou quais portas estão sendo expostas pelo Docker? Talvez eu esteja mapeando a porta interna errada?

Ou há outras sugestões gerais sobre o que eu posso estar fazendo de errado aqui?

    
por jonathanconway 12.10.2015 / 07:48

4 respostas

8

Finalmente descobri como fazer isso funcionar!

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

Acontece, navegando 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 uso 192.168.99.100 , dado acima, tudo funciona bem.

    
por 12.10.2015 / 11:04
1

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

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myContainerID
    
por 06.03.2017 / 15:35
0

Se você executar o docker com docker-machine , use o seguinte comando para obter o endereço IP (assumindo que default é seu nome):

docker-machine ip default

Veja: link

    
por 02.05.2017 / 00:56
0

Começou a jogar com o docker e este é o primeiro problema / problema que me deparei.

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

No modo de ponte de encaixe, a janela de encaixe mostra uma mensagem quando você implanta o fantasma - Seu blog agora está disponível no link , mas a visita a este URL mostra a conexão 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 hostname / ports. Crie um mapeamento como mostrado na imagem da porta do docker para a porta do host e bingo. Agora, visite a URL novamente e tudo funciona conforme o esperado.

Porta de configurações de instância do Kitematic

    
por 26.04.2018 / 04:35