Wildfly nel contenitore Docker non si avvia


10

Sto cercando di accedere alla pagina di benvenuto di Wildfly in esecuzione su un contenitore Docker in Windows 10 Pro. Questo è quello che ho fatto:

Tirato l'immagine:

docker pull jboss/wildfly

Esegui il contenitore Wildfly (funziona bene, nel registro Wildfly posso vedere che è stato avviato correttamente):

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

Trova l'ID contenitore:

docker ps

Ispeziona l'indirizzo IP:

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

L'indirizzo IP è 172.17.0.2, in un browser, vado su http://172.17.0.2:8080/ ma il browser si blocca e scade. Cosa mi sto perdendo?

AGGIORNARE

Ho anche provato con 127.0.0.1:8080e non funziona neanche

UPDATE2

Registro della 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

Vedi la risposta stackoverflow.com/a/43762751/7873775 e cercare 10.0.75.1:8080 e 10.0.75.2:8080.
Evgeniy Khyst

Scusa, ma non ha funzionato. Ho sia la finestra mobile che il browser in esecuzione sullo stesso computer Windows 10. Non è 10.0.75.xun indirizzo esterno e il browser tenta di trovarlo sul Web?
ps0604

1
OK, proviamo a trovare il problema. Si prega di inviare i risultati dei seguenti comandi CLI: 1. docker --version, 2. docker run hello-world, 3. docker run --detach --publish 8080:80 --name webserver nginx, 4. quindi provare ad aprire localhost: 8080
Evgeniy Khyst

Vedere la domanda aggiornata con il registro della console. Ho provato localhost:8080ed è scaduto. docker psspettacoliCONTAINER 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

@Evgeniy Khyst Ho trovato questo articolo che parla della rete docker. Dice che il server in esecuzione all'interno del contenitore deve ascoltare tutte le interfacce (l'ultima parte dell'articolo), si applica?
ps0604

Risposte:


3

Per impostazione predefinita, quando si crea un contenitore, non pubblica nessuna delle sue porte nel mondo esterno. La rete 172.17.XX è interna. Se è necessario associare l'indirizzo IP per ospitare il contenitore docker di esecuzione ip con flag -p, in questo modo:

-p 8080: 8080

Mappare la porta TCP 8080 nel contenitore alla porta 8080 sull'host Docker


Perché questo esempio funziona se le porte non sono pubblicate nel mondo esterno?
ps0604,

@Sarai erroneamente modificato la risposta, se dai un'occhiata alla domanda è esattamente quello che stavo facendo.
ps0604,

@ ps0604 sembra che ci sia un problema di rete. Nel tuo caso controlla le regole del firewall
Ivan Vovk il

Quindi la tua risposta non è corretta?
ps0604,

La mia risposta è corretta, perché si basa sulla raccomandazione della documentazione.
Ivan Vovk,

3

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

Il port forwarding funziona per localhost; --publish, -p o -P funzionano tutti. Le porte esposte da Linux vengono inoltrate all'host.

Quindi dovrebbe essere accessibile da http: // localhost: 8080


Se il problema persiste, prova l'esempio di Windows

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

Che dovrebbe essere accessibile http: // localhost: 80

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


Se anche quello fallisce, prova:

docker-machine ip default

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


1
non funziona in localhost: 8080, scusa
ps0604

Potresti provare l'esempio che ho pubblicato sopra per vedere se è un problema con jboss / wildfly o se è la tua rete di Windows?
Tyhal

E se nginx non funziona, puoi eseguire 'docker-machine ip default' E provare a usare l'IP lì invece di localhost
Tyhal

0

Le informazioni chiave sono Docker container in Windows 10 Pro: questa è una specifica molto generica su come funziona Docker su Windows. Ci possono essere molte opzioni ad esempio Docker for Windowscon / senza Linux containers, Docker toolbox, istanza remota, ....

Generalmente i contenitori Docker su Windows sono in esecuzione in una sorta di macchina virtuale (Hyper-V, Virtualbox, ...), di solito. Quindi c'è un ulteriore livello di rete, che potrebbe non essere accessibile direttamente dal tuo spazio dei nomi di rete di Windows. Ma l' esempio collegato viene eseguito su una macchina Linux, dove questo livello di rete aggiuntivo non esiste. E questo è un motivo per cui l'esempio di copia / incolla di Linux non funziona su Windows. Quindi eseguire il contenitore come al solito ed esporre la porta 8080:

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

Ma l'IP per l'accesso sarà diverso e non è possibile utilizzare l'IP contenitore, poiché è molto probabile che la rete docker interna non sia accessibile da Windows. Prova invece a utilizzare l'IP del tuo sistema operativo Windows. Controllare infine la documentazione della Docker on Windowssoluzione utilizzata e individuare quale IP viene utilizzato per le porte esposte.

Se si dispone di capacità avanzate di rete Windows / Linux, è possibile in qualche modo instradare / inoltrare la porta dallo spazio dei nomi della rete container, attraverso il livello di rete VM intermedio al livello di rete Windows. Ma può essere piuttosto complicato.


Jan, ho installato Docker Desktop per Windows , scaricato l'immagine ed eseguito il contenitore Wildfly come spiegato nel tutorial sopra. Nella console vedo che inizia bene, ed 8080:8080è quello che in teoria dovrebbe funzionare, ma non funziona. Non so di rete, dove dovrei iniziare a cercare?
ps0604,

@ ps0604 Se vuoi seguire il tutorial di Linux alla cieca, usa Linux. Come ho detto doc è tuo amico - docs.docker.com/docker-for-windows/networking viene esplicitamente menzionato 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.. Si prega di affrontare tale limitazione.
Jan Garaj,

0

Ho avuto un peer che lavorava su un sistema Windows con lo stesso problema. Ci mise molto impegno e non riuscì ad arrivare da nessuna parte. Sembra che ci siano molte cose strane che accadono con Docker Desktop per Windows. Finalmente abbiamo appena installato il sottosistema Linux per Windows e installato docker lì e ha funzionato come un fascino per lui da allora in poi. Se desideri restare su Windows e non ti dispiace lavorare sul sottosistema Linux, ti suggerisco di seguire questa strada. Siamo andati oltre quanto suggerito da Jan Garaj e lo abbiamo appena trovato una perdita di tempo. Docker Desktop per Windows è pensato per essere un ambiente in cui lavori completamente al suo interno - utilizzando i contenitori dev ecc. Le cose Host-Container sono un problema.


Sì, sono d'accordo, creerò i contenitori in Ubuntu anziché Windows, non ho problemi lì. L'unica cosa è che sviluppo in Windows, quindi dovrei testarlo tre volte, una volta in Windows durante lo sviluppo, quindi nel contenitore Linux, e infine quando carico il contenitore sul cloud. Se riesco a eseguire il contenitore in Windows, testerei solo due volte.
ps0604

ecco perché ho suggerito il sottosistema Linux .. in realtà non devi cambiare contesto 3 volte, forse 2-2,5 volte;)
Sam Thomas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.