O Wildfly no contêiner do Docker não inicia

10

Estou tentando acessar a página de boas-vindas do Wildfly em execução em um contêiner do Docker no Windows 10 Pro. Isto é o que eu fiz:

Puxou a imagem:

docker pull jboss/wildfly

Execute o contêiner Wildfly (isso funciona bem, no log do Wildfly posso ver que ele foi iniciado corretamente):

docker run -it -p 8080:8080 jboss/wildfly

Encontre o ID do contêiner:

docker ps

Inspecione o endereço IP:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" cac63ed21d78

O endereço IP é que 172.17.0.2, em um navegador, vou para http://172.17.0.2:8080/, mas o navegador trava e o tempo limite é excedido. o que estou perdendo?

ATUALIZAR

Eu também tentei 127.0.0.1:8080e também não está funcionando

UPDATE2

Log do console:

docker --version

#Docker version 19.03.1, build 74b1e89e8a

docker run hello-world

#Hello from Docker!

docker run --detach --publish 8080:80 --name webserver nginx

#Unable to find image 'nginx:latest' locally
#latest: Pulling from library/nginx
#8ec398bc0356: Pull complete
#465560073b6f: Pull complete
#f473f9fd0a8c: Pull complete
#Digest:  sha256:b2d89d0a210398b4d1120b3e3a7672c16a4ba09c2c4a0395f18b9f7999b768f2
#Status: Downloaded newer image for nginx:latest
#c5cdb6de11240b5fe33bc424779721e1b44948797fd6ff389004d0766b71dd17

docker ps

#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 
#nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604
fonte
Consulte a resposta stackoverflow.com/a/43762751/7873775 e tente 10.0.75.1:8080 e 10.0.75.2:8080.
Evgeniy Khyst 04/01
Desculpe, mas isso não funcionou. Eu tenho o docker e o navegador em execução na mesma máquina Windows 10.Não é 10.0.75.xum endereço externo e o navegador tenta encontrá-lo na Web?
ps0604 4/01
11
OK, vamos tentar encontrar o problema. Poste os resultados dos seguintes comandos da CLI: 1. docker --version, 2. docker run hello-world, 3. docker run --detach --publish 8080:80 --name webserver nginx, 4. e tente abrir o host local: 8080
Evgeniy Khyst
Consulte a pergunta atualizada com o log do console. Eu tentei localhost:8080e expirou. docker psshowsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604 4/01
@ Evgeniy Khyst Encontrei este artigo que fala sobre redes docker. Ele diz que o servidor em execução no contêiner precisa escutar todas as interfaces (a última parte do artigo), isso se aplica?
ps0604 4/01

Respostas:

3

Por padrão, quando você cria um contêiner, ele não publica nenhuma de suas portas no mundo externo. A rede 172.17.XX é interna. Se você precisar vincular o endereço IP ao host, execute o contêiner do docker ip com o sinalizador -p, assim:

-p 8080: 8080

Mapeie a porta TCP 8080 no contêiner para a porta 8080 no host do Docker

Ivan Vovk
fonte
Por que este exemplo funciona se as portas não são publicadas no mundo externo?
ps0604 11/11/19
@ Você editou incorretamente a resposta, se você der uma olhada na pergunta, é exatamente o que eu estava fazendo.
Ps0604
@ ps0604 parece que há um problema de rede. No seu caso, verifique as regras de firewall
Ivan Vovk 13/12/19
Então sua resposta estava incorreta?
Ps0604 13/12/19
Minha resposta está correta, porque é baseada na recomendação de documentação.
Ivan Vovk
3

De: https://docs.docker.com/docker-for-windows/networking/

O encaminhamento de porta funciona para o host local; - publicar, -p ou -P todos funcionam. As portas expostas do Linux são encaminhadas para o host.

Portanto, ele deve estar acessível em http: // localhost: 8080


Se isso não funcionar, tente o exemplo do Windows

docker run -d -p 80:80 --name webserver nginx

O qual deve estar acessível http: // localhost: 80

https://docs.docker.com/docker-for-windows/index#explore-the-application-and-run-examples


Se mesmo isso falhar, tente:

docker-machine ip default

E use http: // [docker-machine-ip]: 80

Tyhal
fonte
11
não funciona no localhost: 8080, desculpe
ps0604 08/01
Você poderia tentar o exemplo que eu postei acima para ver se é um problema com o jboss / wildfly ou se é a sua rede do Windows?
Tyhal 8/01
E se o nginx não funcionar, você pode executar o 'docker-machine ip default' e tentar usar o IP lá em vez do localhost
Tyhal
0

As informações principais são Docker container in Windows 10 Pro- esta é uma especificação muito genérica de como o Docker no Windows funciona. Pode haver muitas opções, por exemplo, Docker for Windowscom / sem Linux containers,Docker toolbox instância remota, ....

Geralmente, os contêineres do Docker no Windows são executados em algum tipo de máquina virtual (Hyper-V, Virtualbox, ...), geralmente. Portanto, há uma camada de rede adicional, que pode não estar acessível diretamente no namespace da rede do Windows. Mas o exemplo vinculado é executado na máquina Linux, onde essa camada de rede adicional não existe. E é por isso que o exemplo de copiar / colar Linux não funciona no Windows. Portanto, execute o contêiner normalmente e exponha a porta 8080:

docker run -it -p 8080:8080 jboss/wildfly

Mas o IP para acesso será diferente e o IP do contêiner não pode ser usado, porque é provável que a rede interna do Docker não esteja acessível no Windows. Em vez disso, tente usar o IP do seu sistema operacional Windows. Eventualmente, verifique a documentação dosDocker on Windows solução e descubra qual IP é usado para portas expostas.

Se você possui conhecimentos avançados de rede em janelas / linux, pode, de alguma forma, rotear / encaminhar a porta do espaço de nomes da rede de contêiner, através da camada intermediária de rede da VM para a camada de rede do Windows. Mas pode ser bem complicado.

Jan Garaj
fonte
Janeiro, instalei o Docker Desktop para Windows , baixei a imagem e executei o contêiner Wildfly conforme explicado no tutorial acima. No console, vejo que tudo começa bem, e 8080:8080é o que em teoria deve funcionar, mas não funciona. Não sei sobre redes, onde devo começar a procurar?
ps0604 3/01
@ ps0604 Se você deseja seguir o tutorial do Linux às cegas, use o Linux. Como mencionei, doc é seu amigo - docs.docker.com/docker-for-windows/networking lá é mencionado explicitamente There is no docker0 bridge on Windows: Because of the way networking is implemented in Docker Desktop for Windows, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine.. Por favor, lide com essa limitação.
Jan Garaj
0

Eu tinha um colega trabalhando em um sistema Windows que enfrentava o mesmo problema. Ele se esforçou bastante e não conseguiu chegar a lugar algum. Parece que há muitas coisas estranhas no Docker Desktop para Windows. Finalmente instalamos o subsistema linux para windows e instalamos o docker lá e, a partir de então, funcionou como um encanto para ele. Se você deseja manter o Windows e não se importa de trabalhar no subsistema Linux, sugiro que siga esse caminho. Fomos além do que Jan Garaj sugeriu e achamos que é uma perda de tempo. O Docker Desktop para Windows deve ser um ambiente em que você trabalha completamente nele - usando contêineres de desenvolvimento, etc. O material Host-Container é um problema.

Sam Thomas
fonte
Sim, eu concordo, vou criar os contêineres no Ubuntu em vez do Windows, não tenho problemas lá. A única coisa é que eu desenvolvo no Windows, então eu teria que testar três vezes, uma vez no Windows durante o desenvolvimento, depois no contêiner linux e, finalmente, quando carregar o contêiner na nuvem. Se eu puder executar o contêiner no Windows, testarei apenas duas vezes.
ps0604 9/01
é por isso que sugeri o subsistema linux .. você não precisa mudar o contexto 3 vezes, talvez 2-2,5 vezes;)
Sam Thomas