-
Notifications
You must be signed in to change notification settings - Fork 513
使用Docker搭建测试环境问题
要测试FastDFS客户端,使用Docker是一个好的选择!由于MAC与Windows平台的操作系统差异,使用Docker来测试FastDFS是有差异的。
典型的问题:
用的https://github.com/phinexdaz/fdfs_tracker docker镜像生成的容器,在上传的时候报错com.github.tobato.fastdfs.exception.FdfsConnectException: 无法获取服务端连接资源:can't create connection to/172.17.0.3:23000 一台tracker服务器,2台storage服务器,都是单独部署。排查很久不知道问题出在哪,望解答,谢谢!
此问题明显是Docker网络配置所致:
tracker和storage都在容器内172.17.0.x网段,tracker配置的地址是容器内的地址, 开发的时候在容器外面(如192.168.1.X)访问tracker服务上传数据的时候,内部流转原理是这样的:
- client连接到192.168.1.X:22122 可以访问到tracker
- tracker将自身注册的storage地址返回Client
- 这个时候client拿到了172.17.0.3:23000的storage地址后进行访问,这个时候Client明显连接不到嘛!
在Windows下解决方法是使用--net=host模式,采用宿主机和容器共享网络的方案进行测试。
这个方案有可能需要进入容器调整配置文件的ip地址,如调整容器内tracker配置文件tracker.conf
,修改tracker地址为bind_addr=容器内ip地址
由于MAC平台的限制,使用--net=host模式就不好使了,内部容器无法绑定IP和端口,因此tracker无法启动。
因此在MAC平台下网络方案必须要选择bridge模式,以达到在容器内部指定IP地址和端口的目的。
这个时候依然会出现上述client网段与容器内网段不同的问题,在MAC平台下解决这个问题非常简单,给lo0
设置别名即可
假设容器内地址是172.17.0.2
sudo ifconfig lo0 alias 172.17.0.2
sudo ifconfig lo0 alias 10.0.75.2
设置完毕后在客户端访问172.17.0.2:23000时,会转向访问本机的127.0.0.1:23000,这样就搞定了。
测试完毕记得将别名去掉,否则以后访问172.17.0.2都会转向127.0.0.1
sudo ifconfig lo0 -alias 10.0.75.2
sudo ifconfig lo0 -alias 172.17.0.2
如果服务未启动,执行如下命令
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
#查看服务启动情况(23000/22122 端口)
netstat -lnp |grep fdfs
ps -ef |grep fdfs