Windows 10主机无法SSH连接Docker容器问题求助
Docker容器SSH连接问题解决方法(Windows 10 + Docker 4.9.1)
核心原因
Windows上Docker默认使用WSL2后端,容器的172.17.0.2是WSL虚拟机内部的子网IP,主机无法直接访问该网段,必须通过端口映射或WSL虚拟机IP来建立连接。
具体解决步骤
1. 修正端口映射与容器启动方式
你之前用-ti启动交互式bash会导致容器前台运行,SSH服务无法持续后台监听。正确的启动命令如下:
docker run -d -p 666:22 --name ssh_container with_ssh:new
-d:让容器后台运行,确保SSH服务持续监听端口-p 666:22:将主机的666端口映射到容器的22端口(SSH默认端口)--name:给容器命名,方便后续操作
主机连接时使用以下命令:
ssh root@localhost -p 666
若需从局域网其他设备连接,替换localhost为你的Windows主机局域网IP即可。
2. 排查WSL2网络转发问题
如果localhost连接超时,先获取WSL2虚拟机的IP:
在Windows命令提示符或PowerShell中执行:
wsl hostname -I
得到类似172.28.xxx.xxx的IP后,用该IP连接容器:
ssh root@<WSL2_IP> -p 666
3. 确认容器内SSH服务监听配置
进入容器检查SSH服务是否监听所有网卡:
docker exec -it ssh_container /bin/bash ss -tulpn | grep sshd
如果输出仅显示127.0.0.1:22,说明服务仅监听本地回环,需修改/etc/ssh/sshd_config:
- 找到
ListenAddress配置项,改为ListenAddress 0.0.0.0 - 重启SSH服务:
service ssh restart
4. 检查Windows防火墙规则
Windows防火墙可能拦截了映射的666端口,需添加入站规则:
- 打开「Windows Defender 防火墙」→「高级设置」
- 新建入站规则,选择「端口」→ 勾选TCP,输入
666 - 允许连接并完成规则创建
5. 更高效的替代方案(无需SSH)
Docker官方不推荐通过SSH连接容器,直接使用docker exec即可快速进入容器:
docker exec -it ssh_container /bin/bash
该方式无需配置SSH服务,更安全高效。
内容的提问来源于stack exchange,提问作者not_a_robot
相关产品推荐
相关产品推荐

