Windows环境利用docker安装FastFDS主要会遇到以下几个坑,注意绕行:
1.最主要的问题是在windows环境下docker网络设置与linux不同导致的容器间通信设置复杂问题;
2.存储空间不足问题fdfs_client.exceptions.DataError: [-] Error: 28, No space left on device;
3.storage docker再次启动时,报错tail: cannot open ‘/var/fdfs/logs/storaged.log’ for reading: No such file or directory;
其中第一个问题最为致命,该问题包含两个子问题。1.容器启动运行时的通信问题;2.上传数据时的通信问题。
网上的资料不多,目前找到的方案也只是一套应急方案,不够自动化、移植性弱。
安装流程及避坑说明
0.前序工作
我们在正式操作之前需要安装好docker,并进行FastFDS镜像拉取
docker image pull delron/fastdfs
为了能够时docker容器间能够进行通信,需创建虚拟网络。之所以需要依靠虚拟网络通信是因为–network=host 这个配置只能在Linux系统有效,在Windows环境下目前了解到的还是得靠虚拟网络。
docker network create test-net
1.运行FastFDS容器
如果不设置虚拟网络,应该是报这个错
storage_ip_changed_dealer.c, line: 186, connect to tracker server 192.168.52.129:22122 fail, errno: 111, error info: Connection refused
开启tracker容器
docker run -dit --name tracker -h tracker --network=test-net -p 22122:22122 -v “your dirs”:/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 映射宿主机文件到容器
————————————————
版权声明:本文为CSDN博主「Illusion_Oops」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_39637094/article/details/119067249
开启storage容器
docker run -dti --name storage -h storage --network=test-net -p 8888:8888 -p 23000:23000 -e TRACKER_SERVER=tracker:22122 -v “your dirs”:/var/fdfs delron/fastdfs storage
2.Python框架上传图片至FastFDS
前序工作是安装好fdfs_client库,设置好client.conf的IP地址,这里是本机IP地址
tracker_server=192.168.xx.xx:22122
此刻如果不出意外,就是要出意外了。
Error: 10060 connect to b’172.18.0.2’:22122
我们查看docker虚拟网络信息时可以看到,这个172.18.0.2的IP地址是虚拟网络的地址,与我们的本机IP不同
docker network inspect test-net
问题原因是
storeip配置成内网地址了,访问fastdfs先访问tracker服务器,会返回storeip地址,返回的这个地址是一个192.168这样一个内网地址,无法从我本地传到服务器
————————————————
版权声明:本文为CSDN博主「敲代码敲到头发茂密」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/YZL40514131/article/details/124516386
解决方案目前只找到这一个比较笨的方法。
在tracker_client.py文件中找到tracker_query_storage_stor_without_group方法,其中有获取设置IP地址的地方:
然后手动改了store_serv.ip_addr的值,目前用这种方式暂时实现了特定storeip的功能,如果大家谁了解更好的设置这个值的方法,欢迎指正,记录一下这个问题,希望能帮到遇到这个问题的人。
———————————————— 版权声明:本文为CSDN博主「二月十六」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_28984567/article/details/109468602
如果你引用的是 .egg 的库,那么你会发现你无法修改 tracker_client.py ,这时你需要解压 .egg 包后再修改,并重新引用。解压时需要手动选择解压工具。
进行完上述步骤,如果幸运的话你就能够使用FastFDS了,如果不幸的话,可能会遇到以下问题。
3.其他问题
内存空间不足
fdfs_client.exceptions.DataError: [-] Error: 28, No space left on device;
————————————————
版权声明:本文为CSDN博主「敲代码敲到头发茂密」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/YZL40514131/article/details/124516386
再次启动报缺少文件的错
storage docker再次启动时,报错tail: cannot open ‘/var/fdfs/logs/storaged.log’ for reading: No such file or directory;
删除文件存储路径下的fdfs_storaged.pid,再次启动正常。但是注意,每次重新启动时都需要再次删除这个文件,很不自动化。网上也有其他的方法,例如在镜像里生成这个文件,但是由于个人docker技术差,未尝试成功。
参考文章:
1.Windows(和macos)下Java客户端使用docker安装的fastdfs服务: https://blog.csdn.net/qq_39637094/article/details/119067249
2.storage docker再次启动时,报错tail: cannot open ‘/var/fdfs/logs/storaged.log‘ for reading: No such file or d:https://blog.csdn.net/Dolphin_bobo/article/details/129294534?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-129294534-blog-129485447.235%5Ev38%5Epc_relevant_sort_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-129294534-blog-129485447.235%5Ev38%5Epc_relevant_sort_base2&utm_relevant_index=3
3.Python(py3fdfs)上传到fastdfs配置store_serv.ip_addr问题:https://blog.csdn.net/sinat_28984567/article/details/109468602
说点其他的
这是我第一次写这种文章,也不知道是不是最后一次,希望不是吧。
写它的动机有三个:
1.自己遇到问题时,多亏了网上这些乐于分享的网友,才能够找到解决方案,如果没有他们的这些分享的成果,可能我早就在面对众多问题时被劝退了。所以我想我也应该把自己走过的这些弯路分享出来,帮助更多的人。前人栽树后人乘凉,希望我们每个人既是“后人”也成为“前人”。
2.这个问题耗费了我很长时间,数次让我濒临放弃,是一次次的再试一次的想法才让我最终解决了这个问题,我觉得这是一个有价值的内容,值得被分享出来。
3.自己刚刚走在技术的路上,希望能够积累一些的博客、文章、代码仓库等成果,对日后的工作起到一点帮助。