最近小白需要使用fastDFS,就想用docker搭建一個DFS環境,方便快捷。又開始了踩坑之旅……
搜索一下現有docker鏡像
[root@lixiaobai~]# docker search fastdfs
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
season/fastdfs FastDFS 49
luhuiguo/fastdfs FastDFS is an open source high performance d… 22 [OK]
morunchang/fastdfs A FastDFS image 15
ygqygq2/fastdfs-nginx 整合了nginx的fastdfs 11 [OK]
delron/fastdfs 6
使用第一個
docker pull season/fastdfs
創建相應目錄結構
cd ~
mkdir fastDfsData
cd fastDfsData
mkdir storage
mkdir store_path
mkdir tracker
準備工作完畢 開始踩坑 以下是錯誤示範 先別忙着操作(沒踩前不知道o(╥﹏╥)o)
啓動tracker,storage
docker run -d --name fastdfs-tracker -p 22122:22122 -p 23000:23000 -v ~/fastDfsData/tracker:/fastdfs/tracker/data --net=host season/fastdfs tracker
docker run -d --name fastdfs-storage -v ~/fastDfsData/storage:/fastdfs/storage/data -v ~/fastDfsData/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER=your-ip:22122 season/fastdfs storage
坑一: --host=net 使用這個模式 -p 開放的端口會不起作用 容器啓用默認開放的端口 22122
查看日誌docker logs -f fastdfs-storage 連接不上 本機的 your_ip:22122
查了一些資料 有說 阿里雲的IP沒備案不能用……我用備過案的IP,此處省略1000次,依然不行。
坑二:於是放棄 不使用--net=host 如下
docker run -d --name fastdfs-tracker -p 22122:22122 -p 23000:23000 -v ~/fastDfsData/tracker:/fastdfs/tracker/data season/fastdfs tracker
docker run -d --name fastdfs-storage -v ~/fastDfsData/storage:/fastdfs/storage/data -v ~/fastDfsData/store_path:/fastdfs/store_path -e TRACKER_SERVER=your_ip:22122 season/fastdfs storage
(如果你沒聽話照着做了要刪現有的容器 此處省略 docker stop, docker rm鏡像操作)
查看日誌 docker logs -f fastdfs-storage 發現 連不上 your_ip:22122 這回試試 docker inspect fastdfs-storage
查看橋接模式下 分配的IP
把這個IP設置爲配置文件的tracker_server 重啓 發現storage連接成功。 總算好了
於是在本地用代碼測試上傳文件。失敗。
本地機器 連不上 storage 端口23000的容器內網絡。於是我把代碼部署到阿里雲 再測,可以上傳成功。
但是本地上傳不成功 難道到這裏就放棄了嗎……
不行!
反思一下:通過 這幾次的測試,1.連不上storage,2.配上了容器橋接的ip地址連上了 卻不能公網訪問。
於是小白有個大膽的想法:存儲23000端口 應該在storage上開放。有了下面的配置
這個是親測成功的,可以嘗試了!
docker run -d --name fastdfs-tracker -p 22122:22122 -v ~/fastDfsData/tracker:/fastdfs/tracker/data season/fastdfs tracker
docker run -d --name fastdfs-storage -p 23000:23000 -v ~/fastDfsData/storage:/fastdfs/storage/data -v ~/fastDfsData/store_path:/fastdfs/store_path -e TRACKER_SERVER=your_ip:22122 season/fastdfs storage
(如果你又沒聽話照着做了要刪現有的容器 此處省略 docker stop, docker rm鏡像操作)
這次發現不用把storage改成橋接的IP地址 直接用公網地址 也能連接成功了 本地代碼測試 文件可以正常上傳。
查看日誌 連接成功 激動 ^.^
INFO - file: tracker_client_thread.c, line: 308, successfully connect to tracker server your_ip:22122, as a tracker client
文章末尾:假設你會編寫代碼 測試文件上傳,如果不會我也不會貼代碼。^_^
但是可以給點建議:使用Spring Initializr 創建一個帶web組件的項目 加入 dfs依賴
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>fastdfs-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
配置yml文件
fdfs:
connect-timeout: 10000
tracker-list: your_ip:22122
so-timeout: 3000
spring:
servlet:
multipart:
max-file-size: 10485760
測試代碼
@Autowired
private FastFileStorageClient storageClient;
@PostMapping("/test")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
StorePath sp = storageClient.uploadFile("group1",file.getInputStream(),file.getSize(),extension);
System.out.println(sp.getGroup());
System.out.println(sp.getPath());
}
頁面
<form method="post" enctype="multipart/form-data" action="test">
文件<input type="file" name="file">
<input type="submit" value="上傳">
</form>
好了,小白踩坑不定期,歡迎下次收看。探索路上,一起前行……
O(∩_∩)O~