Estoy tratando de acceder a la página de bienvenida de Wildfly que se ejecuta en un contenedor Docker en Windows 10 Pro. Esto es lo que hice:
Sacó la imagen:
docker pull jboss/wildfly
Ejecute el contenedor Wildfly (esto funciona bien, en el registro de Wildfly puedo ver que comenzó correctamente):
docker run -it -p 8080:8080 jboss/wildfly
Encuentra la ID del contenedor:
docker ps
Inspeccione la dirección IP:
docker inspect -f "{{ .NetworkSettings.IPAddress }}" cac63ed21d78
La dirección IP es 172.17.0.2
, en un navegador voy a http://172.17.0.2:8080/ pero el navegador se cuelga y se agota el tiempo de espera. ¿Qué me estoy perdiendo?
ACTUALIZAR
También probé con 127.0.0.1:8080
y tampoco funciona
ACTUALIZACIÓN2
Registro de consola:
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
10.0.75.x
una dirección externa y el navegador intenta encontrarla en la web?docker --version
, 2.docker run hello-world
, 3.docker run --detach --publish 8080:80 --name webserver nginx
, 4. luego intente abrir localhost: 8080localhost:8080
y se acabó el tiempo.docker ps
espectáculosCONTAINER 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
Respuestas:
De manera predeterminada, cuando crea un contenedor, no publica ninguno de sus puertos en el mundo exterior. La red 172.17.XX es interna. Si necesita vincular la dirección IP al host ip run docker container con el indicador -p, así:
-p 8080: 8080
fuente
De: https://docs.docker.com/docker-for-windows/networking/
Por lo tanto, debe ser accesible desde http: // localhost: 8080
Si eso no funciona, prueba el ejemplo de Windows
Que debería ser accesible http: // localhost: 80
https://docs.docker.com/docker-for-windows/index#explore-the-application-and-run-examples
Si incluso eso falla, intente:
Y use http: // [docker-machine-ip]: 80
fuente
La información clave es
Docker container in Windows 10 Pro
: esta es una especificación muy genérica de cómo funciona su Docker en Windows. Puede haber muchas opciones, por ejemplo,Docker for Windows
con / sinLinux containers
,Docker toolbox
instancia remota, ...En general, los contenedores Docker en Windows se ejecutan en algún tipo de máquina virtual (Hyper-V, Virtualbox, ...), por lo general. Por lo tanto, hay una capa de red adicional, que puede no ser accesible directamente desde su espacio de nombre de red de Windows. Pero el ejemplo vinculado se ejecuta en una máquina Linux, donde esta capa de red adicional no existe. Y esa es una razón por la cual el ejemplo de Linux copiado / pegado no funciona en Windows. Entonces ejecute el contenedor como de costumbre y exponga el puerto 8080:
Pero la IP para el acceso será diferente y la IP del contenedor no se puede usar, porque es muy probable que Windows no pueda acceder a esa red interna de acopladores. En su lugar, intente utilizar la IP de su sistema operativo Windows. Eventualmente verifique la documentación de la
Docker on Windows
solución usada y encuentre qué IP se usa para los puertos expuestos.Si tiene habilidades avanzadas de red de Windows / Linux, entonces de alguna manera puede enrutar / reenviar el puerto desde el espacio de nombres de la red de contenedores, a través de la capa de red VM intermedia a la capa de red de Windows. Pero puede ser bastante complicado.
fuente
8080:8080
es lo que en teoría debería funcionar, pero no es así. No sé sobre redes, ¿dónde debería comenzar a buscar?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 lidie con esa limitación.Tuve un compañero trabajando en un sistema de Windows que enfrentaba el mismo problema. Se esforzó mucho y no pudo llegar a ninguna parte. Parece que hay muchas cosas raras que suceden con Docker Desktop para Windows. Finalmente, acabamos de instalar el subsistema de Linux para Windows e instalamos Docker allí y desde entonces funcionó como un encanto para él. Si desea apegarse a Windows y no le importa trabajar en el subsistema de Linux, le sugiero que siga esa ruta. Fuimos más allá de lo que sugirió Jan Garaj y descubrimos que era una pérdida de tiempo. Docker Desktop para Windows está destinado a ser un entorno en el que trabajas completamente dentro de él, usando contenedores de desarrollo, etc.
fuente