添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

典型的问题:

用的 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平台下解决办法

    在Windows下解决方法是使用--net=host模式,采用宿主机和容器共享网络的方案进行测试。 这个方案有可能需要进入容器调整配置文件的ip地址,如调整容器内tracker配置文件 tracker.conf ,修改tracker地址为 bind_addr=容器内ip地址

    宿主机为MAC平台下解决办法

    由于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