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
![[Docker]Docker掛載nfs系統失敗與解決方式](/api/proxy-image?url=https%3A%2F%2Fpost.billxu.net%2Fwp-content%2Fuploads%2F2022%2F07%2FDocker_Temporary_Image_Google_Blue_1080x1080_v1.webp)