使用docker-machine连接AWS Docker实例时SSH等待超时问题求助
我之前也碰到过docker-machine连AWS EC2卡在SSH环节的糟心事,咱们一步步来排查解决:
排查与解决步骤
1. 先手动验证SSH基础连通性
别先纠结docker-machine,先手动用SSH连一遍EC2实例,确认底层连通没问题:
ssh -i ~/.ssh/id_rsa ec2-user@{EC2 IP}
注意:AWS官方Docker模板的默认用户通常是
ec2-user,部分镜像可能用ubuntu或root,如果ec2-user连不上,试试这两个用户名。
如果手动连不上,那问题出在SSH本身,和docker-machine无关,重点检查:
- 安全组规则:确认22端口是开放给你本地公网IP的,别只看是否开放了0.0.0.0/0,有时候规则顺序或IP范围配置有误
- 密钥权限:本地的
id_rsa文件权限必须设为600(执行chmod 600 ~/.ssh/id_rsa),否则会被SSH拒绝 - 实例状态:AWS控制台里查看实例是否完全启动,再去「监控」->「获取系统日志」看看有没有启动报错
2. 指定正确的SSH用户名(最常见的坑)
docker-machine的generic驱动默认用root用户,但AWS官方Docker模板的默认用户是ec2-user,这大概率是卡住的原因!在create命令里加上--generic-ssh-user参数:
sudo docker-machine create --driver generic \ --generic-ip-address={EC2 IP} \ --generic-ssh-key ~/.ssh/id_rsa \ --generic-ssh-user ec2-user \ dockeraws
3. 确认Docker守护进程的远程访问配置
AWS官方模板应该已经配好,但保险起见,手动SSH进实例后检查:
- 查看
/etc/docker/daemon.json(没有就创建),确保包含远程监听配置:
{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"] }
- 重启Docker服务:
sudo systemctl restart docker - 验证2376端口是否在监听:
sudo netstat -tulpn | grep 2376
4. 延长SSH超时时间
如果是网络延迟导致的超时,增加重试时间:
sudo docker-machine create --driver generic \ --generic-ip-address={EC2 IP} \ --generic-ssh-key ~/.ssh/id_rsa \ --generic-ssh-user ec2-user \ --generic-ssh-timeout 120 \ dockeraws
把超时时间设为120秒,给足连接缓冲。
5. 更新docker-machine到最新版本
旧版本可能存在兼容性问题,更新试试:
curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo mv /tmp/docker-machine /usr/local/bin/docker-machine
如果以上步骤都试过还是不行,你可以把手动SSH连接的输出、EC2系统日志,加上--debug参数重新运行docker-machine create的详细日志贴出来,这样能更精准定位问题。
内容的提问来源于stack exchange,提问作者Zyph
相关产品推荐
相关产品推荐

