Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

[Docker]Docker掛載nfs系統失敗與解決方式

內容目錄

Docker掛載nfs系統失敗與解決方式

手上有個舊專案準備要移植到新機器上,考慮到未來維護決定改變架構,預計要實作LXC 環境中執行docker,並且使用nfs掛載到volume中的架構。
在建置過程中遇到了一些問題,將於以下說明。

LXC 環境

這部分就不多贅述,我們的虛擬平台使用proxmox,然後建置了LXC容器,並且在LXC容器中執行docker,到這邊都很順利。

舊專案docker化

這部分沒什麼大問題,只要將原本專案採用的系統重新用Dockerfile和docker-compose撰寫即可。
原本的專案是php-SQL常見的網站架構,考慮到維護需求,就改寫成web-SQL分離的docker-compose。

實體網站檔案化

服務架起來後,因為有分散架構的規劃,我們將web server與真正的web server file拆開來,然後web server file使用NFS來掛載處理,我們的NAS使用synology牌的機器。

NFS掛載不上去

一開始就遇到NFS掛不上去的狀況,怎麼設定都失敗。都會跑出來權限設定錯誤之類的訊息
而當遇到掛載不上去時可以先用指令確認NFS server是否存在

$ showmount -e <NFS server host>

若服務有起來,輸入指令後應該能看到一些資訊。
檢查過後發現synology需要做幾個設定。
首先是synology的共享資料夾,不只要打開NFS機制,還需要在共享資料夾>資料夾編輯>NFS權限設定白名單IP,並且設定細節,我們是將權限全開。

修改LXC的模式

接下來要打開LXC容器的特權模式,建置容器時有個unprivileged containers選項不能打勾,建置容器完後,option>featuer這邊要將NFS和FUSE打勾。

關閉apparmor

透過錯誤訊息發現還要關閉apparmor。apparmor是Ubuntu中的一個安全相關模組,需要關閉此模組才能讓NFS掛載成功。

$ sudo systemctl stop apparmor

掛載完成

當docker-compose up後都沒有錯誤訊息後,理論上就順利掛載上囉!我們可以用docker-compose run app bash來進去docker中檢查是否真的有掛載上。

$ docker-compose run app bash