0
点赞
收藏
分享

微信扫一扫

Mac下使用Docker搭建FastDFS Java客户端 Connect Timeout

前段时间刚买了16寸ARM版的Macbook Pro,使用期间发现对比Windows,在开发或者是搭环境时会遇到更多蛋疼的问题,而且还不容易解决,另一个方面来看,也是一个学习的机会,可以提高自己分析问题,解决问题的能力,下面来看看标题的问题。

1.我使用了Docker的host网络模式创建了两个容器分别是FastDFS中的Tracker

使用的镜像如下,从Docker仓库上Pull的

用host模式运行出两个容器,192.168.100.26为mac的地址

docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
docker run -d --name storage --net=host -e TRACKER_IP=192.168.100.26:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh

运行后发现在容器内部使用fdfs_test测试无法连接到tracker,问题很多,总而言之就是各种不通,按理说不应该,host模式共享宿主机的ip,应该怎么跑都通才对,后来不断搜索查资料发现是Mac的网卡跟Docker的host模式不兼容,把Mac和Docker放到一起,host模式就会失效。

测试命令:

//首先先去配置client.conf中的trackerip,否则会报错
fdfs_test  /etc/fdfs/client.conf upload  /storage.sh

2.然后我就采用了docker的默认网络模式也就是桥接模式继续创建两个容器

使用桥接模式就需要添加端口映射,将容器中服务的端口映射到外部宿主机的端口,从而直接访问宿主机达到访问容器服务的目的

docker run -d -p 22122:22122   --name tracker   morunchang/fastdfs sh tracker.sh
docker run -d -p 8080:8080   -p 23000:23000  --name storage    -e TRACKER_IP=192.168.100.26:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh

 容器正常运行,然后我继续使用fdfs_test去测试,可以正常上传,但是使用Java客户端上传测试,报错ConnectTimeout,一直在转圈,超过了我们配置的等待时间就会报错,ConnectTimeout

 

此时经过各种查询tracker和storage的日志,和分析,我确定了Java端是可以连接上tracker的 也就是192.168.100.26:22122是可以连通的,但是就是超时,百思不得其解,容器中都可以正常上传,为什么到了java换一个客户端就不行了,然后就是各种百度,最终找到了这个

https://github.com/tobato/FastDFS_Client/wiki/%E4%BD%BF%E7%94%A8Docker%E6%90%AD%E5%BB%BA%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E9%97%AE%E9%A2%98

当时已经从早上八九点解决到晚上六七点了,还没解决,就试了下

我将tracker和storage两台容器的ip都配了对应的别名

 然后又去试了一下,还是不行,当时又是删除容器再各种实验还是不行,已经精疲力尽了,准备放弃,装一个linux虚拟机来跑,然后昨天太累了,就直接容器全删关机了,没在去搞。

3.今天早上准备装虚拟机,准备装Centos的最后发现Pd还没有支持Arm版的Centos,就装了ubuntu

在下载系统的时候我又打开命令行开容器试了一下还是不行,然后又去看了一遍tracker和storage的日志文件,发现了问题的关键点!!!

这是storage节点,端口23000的服务在这上面,这个容器的地址是172.17.0.3,但是日志显示成功连接了172.17.0.1的23000端口,What?,这个地址是哪地方蹦出来的,别管这么多,我就先把这个地址也在Mac上映射了别名

结果Java那边直接跑通了!!!!!

真是见鬼了,估计出问题的地方就在Docker的网络上,服务返回给Java一些内部地址,而且是莫名其妙的地址,因为我是开发人员,所以对Docker网络架构不是特别了解,可能因为172.17.0.1是网关?有运维大佬知道的可以评论指导一下,至此问题解决

总结:这次问题真的很蛋疼,出在了Mac系统这个系统上,换成其他平台可能什么问题都没有,本来都要放弃了,最后还是解决了,以后遇到长时间都没解决的就别解决了,因为当时精力消耗完了,思维也会混乱,不利于解决问题,越急越没有,不如休息一下,第二天再来看,再分析,可能问题就会迎刃而解。

举报

相关推荐

0 条评论