Windows(和macos)下Java客户端使用docker安装的fastdfs服务


前言

关于docker安装fastdfs,网上可以搜素到很多文章,命令步骤也很简单。但是这里有一个致命的坑,--network=host 这个配置只能再Linux系统有效!!!对docker不熟悉,可能是个坑。 其次,使用Windows环境下docker安装的fastdfs,因为docker虚拟IP的原因也会报错连接超时,也是个坑。

提示:对于以上问题,本人并未找到一篇文章完完全全介绍清楚,特此记录解惑。

一、使用docker创建fastdfs

1、创建tracker

docker run -it -d --name tracker -h tracker --network=basenetwork -p 22122:22122   -v D:\docker-desktopdata\containers\fastdfs\tracker:/var/fdfs delron/fastdfs tracker

-network指定容器的运行网络环境
    docker network create basenetwork;创建fastdfs使用的bridge网络
    docker network inspect default_network; 查看一创建的网络信息
    docker network ls; 列出已创建的网络
    docker network rm default_network; 删除已创建的网络
-name 容器的名称
-h 容器的主机名。可以方便同一network下的容器之间进行通信,不必使用IP
-p 映射宿主机到容器(暴露端口)
-v 映射宿主机文件到容器

2、创建storage

docker run -it -d --name storage -h storage --network=basenetwork -p 8888:8888 -p 23000:23000 -e TRACKER_SERVER=tracker:22122 -v D:\docker-desktopdata\containers\fastdfs\storage:/var/fdfs delron/fastdfs storage

3、检查

docker exec -it storage bash

cd /var/fdfs

echo hello world>abc.txt

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf abc.txt

没有报错即可。无需修改其配置。如果对fastdfs想要有更多了解,自行查询。

二、通过Java客户端使用fastdfs

1.引入依赖

<!-- https://mvnrepository.com/artifact/com.github.tobato/fastdfs-client -->
    <dependency>
      <groupId>com.github.tobato</groupId>
      <artifactId>fastdfs-client</artifactId>
      <version>1.27.2</version>
    </dependency>

2.导入fastdfs的配置

可添加在配置类或者启动类上

@Import(FdfsClientConfig.class) // 导入FastDFS-Client组件
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) // 解决jmx重复注册bean的问题

关于具体的使用,各位可以去搜索其他文章,有具体代码示例。在此不多展开描述。
这篇文章,各位可以参考一下


3、问题及解决

不出意外,参考以上步骤,各位启动Java项目后,进行实操必报错。

具体原因是,Java客户端通过配置文件中指定的tracker配置连接到tracker,tracker又连接storage,此时时会报 connect time out。
这是因为tracker记录的storage的IP地址是docker为storage容器虚拟出来的的IP,类似172.18.0.3这种,而宿主机是无法直连docker虚拟出来的IP的,所以就会报错。
这个问题其实是使用docker的问题,所以网上很多文章里里都是使用–network=host来避免虚拟IP的问题,直接通过docker宿主机IP来访问。但是很可惜这种操作不适用于Windows和macos。

这个问题的详细描述参考这里

如果对这个问题进行搜索查询,会发现大部分文章中介绍的解决此问题的方法都是修改iptables,但是这个方法对于Windows和macos同样并不适用(我并不确定)。

但是还好,程序员是万能的,我找到了一位大佬的文章,可以轻松解决这个问题。
具体解决办法参考这里


总结

docker还是需要更熟悉才能很方便的使用,特别是在Windows系统上使用,问题很多,希望大家搜索docker问题的时候尽量带上Windows的限定条件。如有精力,多多学习、深入了解才是王道。

其次,我只是在mac上安装了fastdfs,但是在使用Java使用它报错后,我便没有在mac上进行后续操作了,所以此次文章的内容主要是基于Windows环境的。如果macos下有问题,可以联系我,我会在mac下进行测试,以及更正补充文章。


啦啦啦,我是搬运的小行家,每天开心去搬运~~~

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值