Problema con SSH (en Docker/hyper-v)
Buenos dias gente, mi primer consulta en el grupo se debe a q tengo un problema con Docker para Windows
Con el objetivo de ser lo mas claro posible incluyo los siguientes puntos:
- Antecedentes
- Descripción del problema
- Preguntas
- Mi Búsqueda en google
Si al terminar de leer mi pregunta tan solo me pudieran indicar que debo leer...o como encarar mi investigación....les estaré muy agradecido!!!
Desde ya...muchísimas gracias por cualquier ayuda q puedan brindar!!!
Abrazo.
Gustavo
Antecedentes:
Instalé satisfactoriamente el Docker (con hyper-V), el Kitematic (ahora viene separado)
Setié las variables en entorno:
DOCKER_MACHINE_NAME=default
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH= C:\Users\gfuente\.docker\machine\machines\default
Verifiqué que en %DOCKER_CERT_PATH% existen lo siguientes archivos: id_rsa e id_rsa.pub
Previamente verifique que la instalación anduvo bien…con el siguiente comando desde el cmd:
C:\Users\gfuente>docker run hello-world [Enter]
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b04784fba78d: Pull complete
Digest: sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
Tambien funcionó bien:
C:\Users\gfuente>docker run -it ubuntu bash [Enter]
Descripción del problema:
Pero se queda colgado esperando que haya un ssh disponible y pincha al ejecutar el siguiente comando:
C:\Windows\system32>docker-machine create --driver=hyperv openspecimen
Running pre-create checks...
Creating machine...
(openspecimen) Copying C:\Users\gfuente\.docker\machine\cache\boot2docker.iso to C:\Users\gfuente\.docker\machine\machin
es\openspecimen\boot2docker.iso...
(openspecimen) Creating SSH key...
(openspecimen) Creating VM...
(openspecimen) Using switch "DockerNAT"
(openspecimen) Creating VHD
(openspecimen) Starting VM...
(openspecimen) Waiting for host to start...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Error creating machine: Error detecting OS: Too many retries waiting for SSH to be available.
Last error: Maximum number of retries (60) exceeded
Igualmente sucede para arrancar una maquina ya creada:
C:\Windows\system32>docker-machine start default
Starting "default"...
(default) Waiting for host to start...
Machine "default" was started.
Waiting for SSH to be available...
Pero al entrar al administrador de Hyper-V veo que openspecimen esta creado y funcionando y también default esta funcionando!!.
(MobyLinuxVM se creo automaticamente en la instalación de Docker y vm fue otro intento)
Preguntas:
a) No se identificar quien se quiere comunicar con quien!! ¿donde es que no esta disponible ssh? Creo q son mis contenedores openspecimen y default que una vez que arrancan quieren comunicarse con el servicio docker a traves de ssh. (pero no encuentro dde cambiar la configuración y como el Docker toma la configuracion del Windows (en la Máquina Real)
b) ¿Como pongo disponible el ssh?
Mi Búsqueda en google:
Encontré diversas respuestas, en gral relacionadas con el ruteo (hasta uno que indico que lo resolvió desactivando el firewall de windows...pero en mi PC eso no funcionó!!)
Otro indica que el DockerNAT no anda y no sabe porqué. (Buscando manuales de Docker encontré donde indica como crear un nuevo switch virtual externo... que DOcketNAT es solo para MobyLinuxVM, seguí ese procedimiento, pero me alloca la net card y pierdo conección de mi pc con la lan de mi trabajo, porlo que desactive ese switch)
Otro post donde indica que configuró otro servicio de NAT en el mismo Docker para no usar el que viene por defecto pero no le anduvo!! (coherente con el anterior caso)
Otro que decia que con versiones mas nuevas se solucionó...pero instale de internet la última!!! (mas abajo incluyo versiones que uso)
SI tan solo me pudieran indicar que debo leer...o como encarar mi investigación....les estaré muy agradecido!!! ( o por lo menos si pueden confirmarme quien quiere comunicarse con quien....y porque!! jajaja)
Descripción del ambiente:
docker version: 17.06.0-ce, build 02c1d87
docker-compose version: 1.14.0, build c7bdf9e3
docker-machine version: 0.12.0, build 45c69ad
Os: Wondows 10 pro
Version: 10.0.10586
BuildNumber: 10586
RAM: 8Gb
Proc: 8
Respuestas
Agregado:
AL ejecutar el comando con --debug indica lo siguiente:
...
(default) DBG | [stderr =====>] :
(default) Calling .GetSSHPort
(default) Calling .GetSSHKeyPath
(default) Calling .GetSSHKeyPath
(default) Calling .GetSSHUsername
Using SSH client type: external
&{[-F /dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=none docker@fe80::215:5dff:fe4b:108 -o IdentitiesOnly=yes -i C:\Users\gfuente\.docker\machine\machines\default\id_rsa -p 22] C:\Users\gfuente\scoop\shims\ssh.exe <nil>}
&{C:\Users\gfuente\scoop\shims\ssh.exe [C:\Users\gfuente\scoop\shims\ssh.exe -F /dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=none docker@fe80::215:5dff:fe4b:108 -o IdentitiesOnly=yes -i C:\Users\gfuente\.docker\machine\machines\default\id_rsa -p 22] [] <nil> <nil> <nil> [] <nil> <nil> <nil> <nil> <nil> false [] [] [] [] <nil> <nil>}
exit status 255
Pero no se como interpretarlo!!!
Desde ya muchas gracias!!!
Empezá por fijarte si el binario de ssh (que aparece como externo), existe y lo podes correr (C:\Users\gfuente\scoop\shims\ssh.exe).
En cuanto al cliente ssh, instalate git for windows o el subsistema bash para w10, ssh debería venir incluido por default.
con docker ps podes ver si esta corriendo
con docker logs default podes ver los logs del container (fijate con docker ps el container id o el name).
y fijate si podes hacer un docker exec <container id/name> /bin/sh y ver dentro dle container que pasa.
Igual, me fijaría la documentación (o Dockerfile, si hay) de la imagen a ver por qué intenta ese ssh rancio.