iT邦幫忙

0

在 Container 裡使用 mount.cifs 遇到 permission denied

  • 分享至 

  • xImage

正在建置的服務需要讀取網芳裡的資料,因此需要使用到 mount 。

開發環境在 VBox 裡的 Debian(9 x86_64, docker 18.09.0, build 4d60db4 ) 下,建立 docker container(基於 node:8 的 image) 。
當完成開發,要佈署到正式的的環境 (ubuntu 16.04 x64, docker 17.03.2-ce, build f5ec1e2) 時,發現一直卡在 mount 的環節上。

一直得到… (IP 與 目錄 隱藏處理)

mount: //ip/folder is write-protected, mounting read-only
mount: cannot mount //ip/folder read-only

讓我摸不著頭緒…

已經作的檢查與處理…

host 主機是否能夠進行 mount

在 host 主機執行 mount -t cifs //ip/folder samba -o username="xxx",password="xxx"
可以順利連結,並可以使用 ls 指令看到其中的目錄內容。
表示在 host 上可以順利與目標主機建立連線。

container 建立時需要的權限

確認在建立 container 有包含以下兩行設定。

  --cap-add SYS_ADMIN \
  --cap-add DAC_READ_SEARCH \

有些說法是不需要第二行,無論是只留第一行,或是二行都放。
都得到一樣的錯誤訊息。

安裝 cifs-utils

對 container 執行(exec) 進到 /bin/bash 環境,
跑了 apt-get update && apt-get install cifs-utils 後,
重試連結時,錯誤訊息變成了…

mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

看起來好像卡在另一個地方。

但是在 host 主機上直接執行 mount 不會遇到只能唯讀連線,也沒有 permission denied 的問題,這是在相同連線的指令,用剪貼(確保內容相同)執行下得到的結果。

想問問有沒有遇到類似的問題?
沒有其它排除問題的可能方向?

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2018-11-28 11:43:04 檢舉
docker container的ip設定?
通常container都會用自己的內網,你確定用跟你host網段相同的ip能連?
froce iT邦大師 1 級 ‧ 2018-11-28 11:46:02 檢舉
然後試看看這篇吧。
https://stackoverflow.com/questions/27989751/mount-smb-cifs-share-within-a-docker-container

ok的話麻煩回報一下,我也想知道。
ddtet iT邦新手 5 級 ‧ 2018-11-28 13:38:37 檢舉
結果發現,除了 --cap-add 那兩個外,還要再加上 `--privileged` 那個設定。

為此又回頭去查了 Debian 裡的建構語法,的確是沒有的。

至於為什麼在 Ubuntu 16.04 得加上這個,已經大大超出我的水平了。
只能說好像每家 Linux 都有自己一套安全性原則,不小心就會被卡住。
ddtet iT邦新手 5 級 ‧ 2018-11-28 13:41:09 檢舉
如果出現的是 `write-protected` 那個錯誤訊息,
應該是 `cifs-utils` 沒裝的關係,需要跑 `apt-get install csfs-utils`。
weiclin iT邦高手 4 級 ‧ 2018-11-28 14:33:51 檢舉
我猜可能是 docker 版本的差異
froce iT邦大師 1 級 ‧ 2018-11-28 15:07:15 檢舉
剛剛看了文件,--privileged 相當於 --cap-add ALL。
或許也可以試試看:
--cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH

https://github.com/moby/moby/issues/22197
ddtet iT邦新手 5 級 ‧ 2018-11-28 17:09:43 檢舉
正文說過囉~
我有試著加入 `--cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH`
因為在 Debian 環境中,這兩個設定就夠了。

這也是沒有就這權限部分繼續試下去的原因,結果卡住了。

感謝 @force 告知 --privileged == --cap-add ALL ,
至於缺的是哪個權限,要找時間慢慢一個一個試才知道了。

希望只是 docker 版本差異的關係,這樣未來有機會版本升級就被解決。
不過就今天上午,拿 VBox 裝 ubuntu 16.04.5 版本,能順利重現問題的狀況而言,
要嘛跟 docker 版本無關,要嘛就是這個問題在 ubuntu 能裝的 docker 版本還沒處理。
weiclin iT邦高手 4 級 ‧ 2018-11-28 19:14:56 檢舉
阿你在 ubuntu 安裝 docker 18 試試看不就知道了
weiclin iT邦高手 4 級 ‧ 2018-11-28 19:16:40 檢舉
我自己是用 ubuntu, 公司用 centos, 所以 docker 版本比公司的新, 也確實使用上會遇到不同版本 docker 之間設定的相容性
ddtet iT邦新手 5 級 ‧ 2018-11-28 23:29:42 檢舉
我只是一個想作點小工具,幫自己開發順一點的前端工程師,不是 MIS 啊~ XD
所以儘可能在現有環境下擺弄服務,不想為了與公司產品無關的東西煩 MIS 。

的確啦~多弄幾個測試環境,交叉比對可以得到一些結論。
不過畢竟不是目前主要吃飯技能,功能作出來了,得先回頭去追前端技術,
相關的測試就只能之後找到空檔再測試。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
bcow
iT邦見習生 ‧ 2020-11-10 10:22:14

我碰到跟你類似情況,我是用container去連Synology NAS的資料夾,一樣碰到Permission Denied,後來發現把SMB允許V3就可以了,預設只允許V2。

我要發表回答

立即登入回答