Windows10下用Hyper-V驱动创建Docker Machine遇SSH连接超时错误求助
Docker Machine Hyper-V 创建时 SSH 连接超时(VM已运行且可访问Shell)
你遇到的问题很典型:明明Hyper-V里的machine4虚拟机处于运行状态,甚至能直接访问它的shell,但Docker Machine就是卡在SSH连接验证这一步,报重试次数超限的错误。结合你提供的调试信息,VM的IP(192.160.1.100)能正常获取,但SSH命令执行失败(exit status 255),可以试试下面这些排查和修复步骤:
排查与修复步骤
1. 先确认虚拟交换机的网络连通性
- 打开Hyper-V管理器,找到你用的
docker Virtual Switch,确认它是外部网络类型(绑定了你的物理网卡),并且物理网卡本身能正常联网 - 在Windows主机的命令行里ping VM的IP:
如果ping不通,大概率是虚拟交换机的网络权限问题:ping 192.160.1.100- 检查Windows防火墙是否拦截了VM和主机之间的通信,暂时关闭防火墙测试一下
- 确认虚拟交换机的"允许管理操作系统共享此网络适配器"选项已勾选
2. 手动验证SSH连接细节
从主机直接用OpenSSH客户端连接VM,看具体报错:
ssh -i "C:\Users\Manish Kumar\.docker\machine\machines\machine4\id_rsa" docker@192.160.1.100 -p 22 -v
(加-v参数可以看到详细的连接日志)
根据不同错误对应处理:
- 如果提示
Permission denied (publickey):
Windows下OpenSSH对私钥文件的权限要求很严格,右键id_rsa文件→属性→安全→高级:- 点击"禁用继承",选择"将继承的权限转换为此对象的显式权限"
- 删除所有非当前用户的权限条目,只保留你自己的用户,并设置为"完全控制"
- 如果提示
Connection refused:
进入VM的shell,执行service sshd status检查SSH服务状态,如果未启动,执行service sshd start手动启动,同时可以设置开机自启:update-rc.d sshd enable
3. 调整Docker Machine的SSH重试参数
默认的60次重试可能不够应对你的网络初始化速度,创建机器时可以手动增加超时和重试次数:
docker-machine create --driver hyperv --hyperv-virtual-switch "docker Virtual Switch" --ssh-timeout 300 --ssh-retries 120 machine4
(--ssh-timeout是单次连接超时秒数,--ssh-retries是总重试次数)
4. 替换最新版boot2docker镜像
旧版本的boot2docker镜像可能存在SSH服务启动慢或者兼容性问题:
- 删除缓存里的旧镜像:
del C:\Users\Manish Kumar\.docker\machine\cache\boot2docker.iso - 下载最新版的boot2docker ISO,放到上述缓存目录中
- 重新执行创建命令
可能的原因总结
- 虚拟交换机的网络隔离问题,导致主机无法和VM建立TCP连接(SSH用的22端口)
- SSH私钥文件权限不符合OpenSSH的安全要求,导致认证失败
- boot2docker镜像内的SSH服务启动延迟,超过了Docker Machine的默认等待时间
- Windows防火墙或安全软件拦截了主机与VM之间的SSH通信
内容的提问来源于stack exchange,提问作者Manish Kumar
相关产品推荐
相关产品推荐

