首先发现的问题是在Windows上使用客户端工具登录到docker容器失败了:
检查了docker容器映射的端口,确认了客户端工具所设置的ssh端口没问题。
然后在docker的宿主机上使用ssh -v root@172.17.0.2连接到客户端,发现在
debug1: SSH2_MSG_NEWKEYS received
这一行信息处会停顿一个较长的时间。
一开始按照“解决SSH登录linux服务器慢的问题”这样的关键词去搜索,解决方法有:
方法1. 在容器内添加UseDNS no到/etc/ssh/sshd_config文件
方法2. 修改容器内的/etc/hosts文件,将Windows主机的IP和Hostname添加进去
方法3. 修改/etc/nsswitch.conf,将“hosts:”一行改成:hosts: files dns
方法4. Windows和docker容器网络直连
方法5. 修改mtu大小
然冰暖。。。
要是能看到登录失败的一些信息就好了,刻舟求剑有时候也是解决办法,于是想是不是docker配置错了,DHCP有问题啊(docker的IP没变,不太可能)...
最后在docker info的输出中看到一条非常重要的信息:
WARNING: IPV4 forwarding is disabled
IPV4转发被禁用了!!!,难怪无法通过docker 容器22端口映射的宿主机端口登录。
剩下的事就好办了,开启IPV4转发不就好了吗
开启IPV4转发请看:https://blog.csdn.net/m0_37726449/article/details/100073042,或者自己随便去搜一下。
临时开启:
sysctl -w net.ipv4.ip_forward=1
永久开启:
vim /etc/sysctl.conf
# 增加一行
net.ipv4.ip_forward = 1
# 保存文件
# sysctl -p 重新加载