Docker Toolbox - Localhost no funciona

100

Entonces estoy usando Docker Toolbox porque no tengo Hyper-V en mi máquina ya que no es Windows 10 pro. Todo parece funcionar bien, pero cuando intento 0.0.0.0:80acceder a mi navegador , siempre me devuelve: No se puede acceder a este sitio

Pero cuando ejecuto el comando: docker container psobtengo lo siguiente: 0.0.0.0:80->80/tcplo que significa que esta dirección debería funcionar. Busqué en problemas de stackoverflow y github. Ahora estoy estancado.

¿Me estoy perdiendo de algo?

Gracias, Mark

EDITAR:

El uso docker-machine ip defaultme devuelve 192.168.99.100. Lo ejecuto en el puerto 80. Todavía obtengo el mismo resultado, excepto que la dirección se convierte en la identificación del contenedor:https://fd677edg12

Corro ese comando en cmd para encontrar mi IPv4: cmd /k ipconfig /all. Pon el resultado con el puerto y devuelve lo mismo:https://fd677edg12

marca
fuente
1
0.0.0.0 no es una dirección real, significa que el puerto estaba vinculado a todas las interfaces del host de la ventana acoplable (su computadora con Windows). Pruebe localhost: 80 o cualquier dirección IP que tenga su computadora: 80
fvu
@fvu Sigo recibiendo "no se puede acceder a este sitio". También lo intenté. docker-machine default ip -> 192.168.99.100Así que puse esto en la dirección: 192.168.99.100:80todavía obtengo el mismo resultado.
Mark
1
Si está siendo redirigido, es su aplicación la que está rota. Suponiendo que Docker se esté ejecutando en la misma computadora, debería poder localhost: 80
user2105103

Respuestas:

179

Docker Toolbox no tiene tantas comodidades como Docker para Windows, pero tiene razón al usarlo ya que está en la edición Home.

En Toolbox, nada será localhosty será 192.168.99.100por defecto, ya que está ejecutando una VM Linux en VirtualBox.

Entonces si corres docker run -p 80:80 nginx

(note que tuve que publicar un puerto para 192.168.99.100escuchar en ese puerto)

Entonces ir a http://192.168.99.100debería funcionar.

Bret Fisher
fuente
Gracias por la respuesta. Estoy siguiendo tus pasos excepto agregado docker run -p 80:80 -d nginx. Voy a la dirección y me redirige a https://dev/, nuevamente dice que no se puede acceder al sitio. También quería verificar si tenía algo en el hostsarchivo (aunque sé que no es localhost). Lo comenté todo allí.
Mark
Después de varios intentos, finalmente lo hice funcionar. Lamentablemente, no estoy muy seguro de cuál fue el problema.
Mark
1
Información adicional: Docker Toolbox (utilizado en Windows 7, 8, 8.1 y 10 Home) es en realidad solo un script de inicio envuelto en docker-machinecli. Puede usar docker-machine --helppara ver lo que puede hacer para administrar VirtualBox VM (o crear más).
Bret Fisher
64

Inicialmente tuve algunos problemas para acceder a mis aplicaciones en localhost: 8080 mientras usaba DockerToolBox y OracleVM VirtualBox.

En VirtualBox:

  1. Haga clic en la máquina correspondiente (probablemente la etiquetada como "predeterminada")
  2. Configuraciones
  3. Red> Adaptador 1> Avanzado> Reenvío de puertos
  4. Haga clic en "+" para agregar una nueva regla
  5. Establecer puerto de host 8080y puerto de invitado 8080; asegúrese de dejar la IP del host y la IP del invitado vacías

Ejecute el comando:

docker run -p 8080:8080 ${image_id}
EJJ
fuente
Debido a la configuración de CORS en la API remota, tengo que ejecutarlo como localhost: 8080. ¡Es tan genial que es tan simple, gracias!
phazei
1
Asombroso. En todas partes dicen que no se puede hacer, pero aquí está.
superPhreshHackerKid
Además, asegúrese de no estropear las cosas con otras cosas que ya están escuchando en este puerto o con las entradas localhost / 127.0.0.1 en su archivo de hosts ( C:\Windows\System32\drivers\etc\hosts); tenía que controlar ambos antes de que funcionara para mí ;-)
msa
¡Funcionó a la perfección!
Daggie Blanqx - Douglas Mwangi
43

Estaba siguiendo el tutorial de Docker para Windows en https://docs.docker.com/docker-for-windows/#set-up-tab-completion-in-powershell y me quedé atascado en el paso # 6 cuando probaba nginx en el navegador web . Parece que me enfrenté a un problema similar ya que también uso Windows Home y no tengo Hyper-V. Mi solución es bastante simple:

  1. compruebe la IP predeterminada de su docker

$ docker-machine ip predeterminado

192.168.99.100

  1. Vaya a Oracle Virtual Machine para configurar el reenvío de puertos. Asegúrese de que la configuración de red sea NAT y agregue el reenvío de puertos. IP de host: 127.0.0.1, IP de invitado: 192.168.99.100, puerto configurado en 80 como este

  2. Vuelva a intentarlo con su navegador y ejecute http: // localhost o http://127.0.0.1 (también puede agregar el puerto 80). Debería funcionar.

La cuestión es que la IP de nginx está destinada a ser accesible dentro de la máquina virtual de la ventana acoplable, por lo que necesitamos esa configuración de reenvío de puerto para acceder directamente en el navegador de la máquina host.

nitya wijayanti
fuente
2
Necesitaba un caso cuando los HOST:CONTAINERpuertos son diferentes, por ejemplo docker run --detach --publish 8081:80 --name webserver nginx. Descubrí que en este caso solo tenía que reenviar el HOSTpuerto, es decir, en la configuración de VirtualBox Host IP=127.0.0.1; Host Port=8081; Guest IP=192.168.99.100; Guest Port=8081, no 80como suponía antes. Se ve como en mi máquina de Windows 7 con la caja de herramientas acoplable acoplable hacia delante desde el puerto de contenedores 80de 192.168.99:8081y hacia adelante desde 192.168.99:8081que localhost:8081ya 192.168.99:8081no muestra nada en el navegador web.
1er
13

Puede usar en localhostlugar de '192.168.99.100' siguiendo las instrucciones:

Paso # 01:

docker-machine ip default

Verás la IP predeterminada

Paso # 02:

docker-machine stop default

Paso # 03:

  1. Abra VirtualBox Manager (desde los programas de inicio en la búsqueda de Windows VirtualBox Manager)
  2. Seleccione la imagen de VirtualBox de su máquina Docker (por ejemplo: predeterminada)
  3. Abra Configuración -> Red -> Avanzado -> Reenvío de puertos
  4. Agregue el nombre de su aplicación, el puerto de host deseado y su puerto de invitado i.e, app name : nginx, host: 127.0.0.1, host port: 80, guest port: 80

Paso # 04: Ahora está listo para iniciar su máquina Docker ejecutando lo siguiente:

docker-machine start default

Luego, simplemente inicie su contenedor Docker y podrá acceder a él a través de localhost.

Eche un vistazo aquí para obtener más detalles.

Bablu Ahmed
fuente
2

Para mapear los puertos esperados en localhostlugar de acceder directamente a la IP de la máquina acoplable, puede usar la CLI de VirtualBox.

Si la VM de la máquina acoplable (aquí llamada default) se está ejecutando, agregue y elimine reglas como esta:

> VBoxManage.exe controlvm "default" natpf1 "nginx,tcp,,8888,,8888"
> VBoxManage.exe controlvm "default" natpf1 delete nginx

Si la máquina virtual no se está ejecutando o desea detenerla antes de modificarla:

> docker-machine stop
> VBoxManage.exe modifyvm "default" --natpf1 "nginx,tcp,,8888,,8888"
> VBoxManage.exe modifyvm "default" --natpf1 delete "nginx"
> docker-machine start

Donde está el formato de la regla de reenvío de puertos [<name>],tcp|udp,[<hostip>],<hostport>,[<guestip>], <guestport>.

Tenga en cuenta que en VirtualBox, desea asignar el puerto host del mapa de Docker, no el puerto del contenedor interno. Está mapeando host -> VM, luego Docker mapea VM -> contenedor.

Consulte los documentos de VirtualBox .

James Irwin
fuente
1

Esta es otra forma sencilla de evitar escribir la ip 192.168.99.100. Vaya ay C:\Windows\System32\drivers\etc\hostsagregue al final del archivo:

192.168.99.100 docker.awesome o cualquier nombre de tu agrado.

Guarde el archivo (debe tener derechos de administrador, así que asegúrese de hacer clic con el botón derecho en el archivo y ejecutarlo como administrador para poder guardarlo cuando lo edite).

Vaya a su nombre de dominio elegido, docker.awesome: 8080 en este caso y ahí lo tiene.

Rasso
fuente
0

Después de muchas pruebas, pude conseguir este tablero de anuncios.

  1. El comando docker run que utilicé - docker run -p 4680: 8080 --name bb bulletinboard: 1.0 Aquí, 4680 es el número de puerto localhost. 8080 es el número de puerto del contenedor, el puerto en el que escuchará el contenedor. Este número de puerto se menciona en el comando EXPOSE en Dockerfile.

  2. Luego, vaya al navegador web y escriba 192.168.99.100:4680

Aquí, 192.168.99.100 es la dirección IP de la máquina acoplable (use el comando -> ip de la máquina acoplable)

  1. Después de esto, la página de su navegador debería abrirse para:

ingrese la descripción de la imagen aquí

Espero que esto les ayude a todos !!

Ajay
fuente