Docker Desktop,Windows 10-等待SSH可用/证书由未知机构签名

时间:2019-06-27 13:57:16

标签: docker docker-machine

为该问题提供解决方案,以防对他人有所帮助,因为确切的问题/解决方案似乎未包含在具有相似标题的其他线程中。

症状是,尝试使用docker-machine create --driver hyperv testvm创建新的虚拟机时,进程挂在:

Running pre-create checks...
Creating machine...
(testvm) Copying F:\Virtual\Docker\cache\boot2docker.iso to 
F:\Virtual\Docker\machines\testvm\boot2docker.iso...
(testvm) Creating SSH key...
(testvm) Creating VM...
(testvm) Using switch "Docker External Switch"
(testvm) Creating VHD
(testvm) Starting VM...
(testvm) 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...

这与Windows 10 Pro,Hyper-V和全新安装的Docker Desktop Community 2.0.0.3一起使用(尽管我怀疑Hyper-V与该问题无关)。

当我ctrl-ccreate命令中退出时,我可以docker-machine ls看到VM已启动,但显示错误:

NAME     ACTIVE   DRIVER   STATE     URL                       SWARM   DOCKER    ERRORS
testvm   -        hyperv   Running   tcp://192.168.5.61:2376           Unknown   Unable to query docker version: Get https://192.168.5.60:2376/v1.15/version: x509: certificate signed by unknown authority

所有尝试docker-machine ssh的尝试都失败了:

PS C:\> docker-machine ssh testvm
exit status 255

我尝试按照其他线程在其他地方建议的那样使用git bash,但是看到的是:

$ docker-machine ssh testvm
Error: Cannot run SSH command: Host "testvm" is not running

(就像我的git bash安装中出现某种配置问题,但无法弄清楚是什么!)

1 个答案:

答案 0 :(得分:0)

问题出在我在这里安装的OpenSSH导致某种兼容性问题:

PS C:\> get-command ssh

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     ssh.exe                                            7.7.2.1    C:\Windows\System32\OpenSSH\ssh.exe

这将产生调试输出(当使用docker-machine开关运行-debug时):

(testvm) Calling .GetSSHPort
(testvm) Calling .GetSSHKeyPath
(testvm) Calling .GetSSHKeyPath
(testvm) Calling .GetSSHUsername
Using SSH client type: external
&{[-F /dev/null -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=none -o LogLevel=quiet -o PasswordAuthentication=no -o ServerAliveInterval=60 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null docker@192.168.5.61 -o IdentitiesOnly=yes -i F:\Virtual\Docker\machines\testvm\id_rsa -p 22] C:\Windows\System32\OpenSSH\ssh.exe <nil>}
About to run SSH command:
exit 0
SSH cmd err, output: exit status 255:
Error getting ssh command 'exit 0' : ssh command error:
command : exit 0
err     : exit status 255
output  :

当我使用documented here--native-ssh开关时,一切都开始起作用。然后,我能够:

docker-machine --native-ssh regenerate-certs testvm

..解决证书问题,并且:

PS C:\> docker-machine --native-ssh ssh testvm ps
  PID TTY          TIME CMD
 3301 pts/0    00:00:00 ps

.. etc。

可能更好:

docker-machine rm -y testvm
docker-machine --native-ssh create --driver hyperv testvm

一切都在某一时刻为我工作,而无需进行任何切换-我的猜测是当时我没有安装OpenSSH,并且docker-machine默认使用其本机版本。