簡體   English   中英

在 Docker 容器中掛載 SMB/CIFS 共享

[英]Mount SMB/CIFS share within a Docker container

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

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

現在我正在嘗試將一個生產容器放在一起,該容器將在不同的服務器上運行,並且不依賴於安裝在主機上的 CIFS 共享。 因此,我嘗試將適當的條目添加到容器中的/etc/fstab文件並使用mount -a掛載它們。 我收到mount error(13): Permission denied

網上的一些研究使我找到了這篇關於 Docker 安全性的文章 如果我沒看錯的話,Docker 似乎明確拒絕了在容器內掛載文件系統的能力。 我嘗試以只讀方式安裝共享,但這(不出所料)也失敗了。

所以,我有兩個問題:

  1. 我是否正確理解 Docker 阻止在容器內使用任何mount

  2. 誰能想到另一種方法來完成此操作,而無需在主機上安裝 CIFS 共享,然后在 Docker 容器中安裝主機文件夾?

是的,Docker 阻止您在容器內安裝遠程卷作為安全措施。 如果你信任你的鏡像和運行它們的人,那么你可以使用--privileged標志和--privileged docker run來禁用這些安全措施。

此外,您可以結合使用--cap-add--cap-drop來僅為容器提供其實際需要的功能。 (請參閱文檔) SYS_ADMIN功能是授予安裝權限的功能。

  1. 是的
  2. 容器中有一個封閉的問題mount.cifs

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

根據哪個添加

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

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

我試了一下,然后:

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

在容器內然后工作

您可以使用smbclient命令(Samba 包的一部分)從 Docker 容器內訪問 SMB/CIFS 服務器,而無需安裝它,就像使用curl下載或上傳文件一樣。

StackExchange Unix上有一個問題可以解決這個問題,但簡而言之:

smbclient //server/share -c 'cd /path/to/file; put myfile'

對於多個文件,有-T選項可以創建或提取.tar檔案,但是這看起來是一個兩步過程(一個創建.tar ,然后另一個在本地提取它)。 我不確定您是否可以使用管道一步完成。

您可以使用 Netshare docker 卷插件,該插件允許將遠程 CIFS/Samba 掛載為卷。

不要為了掛載共享而暴露許多端口,從而降低容器的安全性。 或者以--privileged運行它

這是我解決這個問題的方法:

  • 首先在運行 docker 的服務器上掛載卷。

sudo mount -t cifs -o username=YourUserName,uid=$(id -u),gid=$(id -g) //SERVER/share ~/WinShare

在此處更改用戶名、SERVER 和 WinShare。 這將詢問您的 sudo 密碼,然后它會詢問遠程共享的密碼。

假設您在WinShare文件夾中創建了WinShare文件夾。 運行此命令后,您應該能夠看到WinShare文件夾中的所有共享文件夾和文件。 除此之外,因為您使用uidgid標簽,您將擁有寫訪問權限,而無需一直使用 sudo。

  • 現在您可以使用-v標記運行您的容器並在服務器和容器之間共享一個卷。

假設你像下面這樣運行它。

docker run -d --name mycontainer -v /home/WinShare:/home 2d244422164

您現在應該能夠訪問 Windows 共享並從您的容器中對其進行修改。

要測試它,只需執行以下操作:

docker exec -it yourRunningContainer /bin/bash

cd /Home

touch testdocfromcontainer.txt

您應該testdocfromcontainer.txt在 Windows 共享中看到testdocfromcontainer.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM