docker服务器:connect to host cdh04 port 22: No route to host 分析并解决

🔍 一、排查思路总览

  1. 确认目标主机(cdh04)是否运行正常
  2. 确认目标主机的 Docker 容器是否运行并绑定了 SSH 端口
  3. 确认网络配置是否通
  4. 确认 SSH 服务是否正常监听并运行
  5. 确认防火墙和安全组设置

🧪 二、详细排查步骤

✅ 1. Ping 主机名是否能通(DNS or Hosts 问题)

ping cdh04 
  • 如果提示:ping: unknown host cdh04
    • 说明主机名无法解析,检查 /etc/hosts 或 DNS。
  • 如果提示:Destination Host Unreachable
    • 说明网络层面有问题,继续往下查。

✅ 2. 确认是否为 Docker 容器内部主机

如果你是用 Docker 模拟 CDH 集群,那么 cdh04 可能是某个容器的别名。可通过以下命令确认:

docker ps -a | grep cdh04 

如果找不到:

  • 容器可能没有启动;
  • 容器网络未配置正确;
  • 或者该容器已崩溃。

可用以下命令查看网络:

docker network ls docker network inspect <网络名> 

✅ 3. 检查容器是否监听 22 端口

进入宿主机,检查容器绑定端口:

docker inspect cdh04 | grep -A 5 "PortBindings" 

确认是否有:

"22/tcp": [   {     "HostPort": "2222"   } ] 

表示你需要用 ssh -p 2222 用户名@宿主机IP 才能访问,而不是直接 ssh cdh04


✅ 4. 检查 SSH 服务是否运行

进入容器:

docker exec -it cdh04 bash 

确认:

ps -ef | grep sshd 

如果没有:

service ssh start 

或者:

/etc/init.d/ssh start 

还可以查看日志:

cat /var/log/auth.log 

✅ 5. 容器网络是否正常(重要)

查看容器网络是否被桥接成功:

docker network inspect bridge 

容器是否有 IP:

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' cdh04 

从宿主机 ping 容器 IP:

ping <容器IP> 

如果 ping 不通,可以尝试重启容器网络:

systemctl restart docker 

或使用:

docker network rm <网络名>  # 慎用,确认后使用 docker network create ... 

✅ 6. 防火墙与安全设置

查看 iptables(或 firewalld)是否阻拦了:

iptables -L -n | grep 22 

或者:

systemctl status firewalld 

临时关闭测试:

systemctl stop firewalld iptables -F 

💡 三、常见问题与建议

问题原因解决方式
No route to host宿主机到容器路由不通检查容器网络、端口映射
Connection refused容器未运行 SSH 服务或未监听 22 端口启动 ssh 服务,检查监听端口
ping 不通容器Docker 网络异常重建 docker 网络或检查 bridge 网络配置
容器无法被主机名访问/etc/hosts 缺失或 DNS 配置错误添加主机映射或使用容器 IP

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注