2015-01-16 124 views
15

我有一個運行在Docker容器中的Web應用程序。此應用程序需要訪問公司文件服務器上的某些文件(帶有Active Directory域控制器的Windows Server)。我嘗試訪問的文件是爲我們的客戶創建的圖像文件,Web應用程序將它們顯示爲客戶組合的一部分。在Docker容器中安裝SMB/CIFS共享

在我的開發機器上,我通過/etc/fstab中的條目安裝了相應的文件夾,並且通過--volume參數將主機掛載點安裝在Docker容器中。這工作完美。

現在我試圖把一個生產容器放在一起,它將運行在不同的服務器上,並且不依賴主機上掛載的CIFS共享。所以我試圖將相應的條目添加到容器&中的/etc/fstab文件中,並使用mount -a進行裝載。我得到mount error(13): Permission denied

一個小小的研究網絡導致我this article about Docker security。如果我正確地閱讀它,看起來Docker顯式拒絕在容器中裝載文件系統的能力。我試圖以只讀方式掛載股票,但這(意外)也失敗了。

所以,我有兩個問題:

  1. 難道我的理解是,碼頭工人防止任何使用mount內部容器是否正確?

  2. 任何人都可以想出另一種方法來完成這個沒有在主機上安裝CIFS共享,然後將主機文件夾掛載到Docker容器中?

回答

15

是的,Docker阻止您在容器內安裝遠程卷作爲安全措施。如果您信任您的圖像以及運行它們的人員,則可以使用--privileged標誌與docker run禁用這些安全措施。

此外,您可以合併--cap-add--cap-drop,僅爲容器提供實際需要的功能。 (See documentation)SYS_ADMIN功能是授予掛載特權的功能。

+0

感謝您的幫助! – Kryten

+0

我已經將--privileged標誌添加到docker運行命令中......但我的CIFS共享不會在容器啓動時自動加載。從容器裏面,如果我把mount -a全部正常工作。 有什麼建議嗎?謝謝。 –

+0

@FabrizioA安裝卷是客人的責任。允許(或不允許)安裝卷是Docker的責任。如果您需要更多幫助,您應該提出一個新問題,因爲這與Kryten的問題不一樣。 –

6
  1. 有一個容器

https://github.com/docker/docker/issues/22197

mount.cifs根據該一個封閉的問題添加

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

運行選項將使mount -t cifs正常運行。

我嘗試過了,並且:

mount -t cifs //<host>/<path> /<localpath> -o user=<user>,password=<user>

在容器內即可工作

+0

另請參閱https://github.com/moby/moby/issues/31452 –