李小白踩坑實錄不定期篇:Docker安裝fastDFS

最近小白需要使用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~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章