docker安装fastdfs服务问题(爬坑记录)

docker安装fastdfs服务问题(爬坑记录)

废话不多说,之所以写这个笔记,是因为遇到坑时,网上没有对应的解决方案,是自己花时间去摸索搞定的,希望遇到同样问题的你,可以省下些许时间做其他的事情.

1.docker安装fastdfs确实让fastdfs的安装简洁了太多了,最原始的安装简直要命,我也曾被折磨过,网上docker安装fastdfs的博文,有很多,大同小异,基本就是如下的内容:

//拉取镜像(不一定是这个镜像)
docker pull delron/fastdfs
//启动tracker服务(--privileged=true主要是解决目录权限,有些有有些没有,加不加并没有太大影响)
docker run -dti --network=host --name tracker --privileged=true -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker
//启动storage服务
docker run -dti  --network=host --name storage -e TRACKER_SERVER=你fastdfs安装的ip:22122 -v /var/fdfs/storage:/var/fdfs --privileged=true  -v /etc/localtime:/etc/localtime  delron/fastdfs storage
//一般在内网服务器这样两三个命令,即可完成fastdfs服务器的搭建

但是呢,我由于某些原因,需要在云服务器上部署fastdfs,就按照如上的方式去部署,以为就可以了,没想到一直是各种问题,这个很奇怪,网上也找不到解决方案.于是我就在内网服务器上,进行比较测试:

1.开始想到的是就是网络的问题,确实也是如此,如果配置容器是host网络,那么fastdfs还是失败的,设置了host就又可以了

2.因为host是宿主机和容器间没有网络隔离,所以storage通过宿主机的ip访问tracker的ip:22122就没有问题,这个就涉及容器间的相互访问问题,网上由很多种,推荐使用自己创建的网络,默认的驱动是bridge,把对应的容器添加到对应的自定义网络里去,网络里的容器就可以进行通讯了,但是由于容器的ip是不固定的(每次新建都不一定相同),使用ip通讯肯定行不通的,但是可以通过容器名访问,可以通过容器名ping通对方.

3.之前试过把tracker的22122通过-p 22122:22122映射到宿主机,然后在storage配置TRACKER_SERVER=宿主机IP:22122,发现tracker里的日志是client的ip不是对应的,不一致,还是不行

4.最后因为在同一个自定义的网络里容器可以通过容器名访问直接,把宿主机的IP换成tracker容器名,就可以了
如TRACKER_SERVER=tracker(tracker容器名):22122,这个就是storage的docker run命令里的那个 -e 里的环境变量,由于storage里的配置有很多都用到,使用环境变量的方式,可以不用你去都改掉才能用.

具体我的操作步骤:

//可以先创建网络,通过--network=my-net指定,也可以等容器启动后,通过如下将容器加入网络
docker network conncet my-net 容器名
//默认是bridge驱动,也可以使用 -d bridge指定
docker network create my-net 
//然后就是,
docker pull delron/fastdfs
//启动tracker服务(--privileged=true主要是解决目录权限,有些有有些没有,加不加并没有太大影响)
docker run -dti --network=my-net --name tracker --privileged=true -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker
//启动storage服务,我这里没有修改监听端口使用默认的8888
//需要注意的是必须把nginx监听的端口8888映射到宿主机,否则无法访问到容器的storage服务器
docker run -dti -p 8888:8888  --network=my-net --name storage -e TRACKER_SERVER=tracker的容器名:22122 -v /var/fdfs/storage:/var/fdfs --privileged=true  -v /etc/localtime:/etc/localtime  delron/fastdfs storage

改变 network把host改为my-net(自定义网络),-e TRACKER_SERVER=的内容改为 tracker服务的容器名(第一个命令启动的容器名)

目前没有成功使用docker-compose成功部署过fastdfs,虽然是按着单个启动命令迁移过去的,改配置的也没少,它就是不成功,所以就只用单个部署的方式去启动和使用fastdfs

注意:云服务器需要把fastdfs的端口添加到安全组(入站),否则外部网络无法访问(一般使用默认端口需要放开8888,22122,23000)

你可能感兴趣的:(笔记)