[英]How to mount network Volume in Docker for Windows (Windows 10)
我們正在努力在 Docker 中創建一個標准的“數據科學”圖像,以幫助我們的團隊保持一致的環境。 為了使這對我們有用,我們需要容器對我們公司的網絡具有讀/寫訪問權限。 如何將網絡驅動器掛載到 docker 容器?
這是我使用來自 Docker Hub 的 rocker/rstudio 圖像嘗試過的:
這有效:
docker run -d -p 8787:8787 -v //c/users/{insert user}:/home/rstudio/foobar rocker/rstudio
這不起作用(其中 P 是 .network 驅動器的映射位置): docker run -d -p 8787:8787 -v //p:/home/rstudio/foobar rocker/rstudio
這也不起作用: docker run -d -p 8787:8787 -v //10.1.11.###/projects:/home/rstudio/foobar rocker/rstudio
有什么建議么?
我對 Docker 比較陌生,所以如果我不是很清楚,請告訴我。
我知道這相對較舊-但為了其他人-這通常對我有用。 使用 - 我們使用 Windows 文件服務器,因此我們使用 cifs-utils 來映射驅動器。 我假設以下說明也可以應用於 nfs 或其他任何東西。
首先 - 需要以特權模式運行容器,以便您可以在容器內掛載遠程文件夾(可能不需要--dns
標志)
docker run --dns <company dns ip> -p 8000:80 --privileged -it <container name and tag>
現在,(假設 centos 帶有 cifs 並且是容器中的根) - 跳入容器並運行:
如果尚未安裝,請安裝 cifs-utils
yum -y install cifs-utils
創建要映射的本地目錄mkdir /mnt/my-mounted-folder
准備一個包含用戶名和憑據的文件echo "username=<username-with-access-to-shared-drive>" > ~/.smbcredentials
echo "password=<password>" > ~/.smbcredentials
映射遠程文件夾mount <remote-shared-folder> <my-local-mounted-folder> -t cifs -o iocharset=utf8,credentials=/root/.smbcredentials,file_mode=0777,dir_mode=0777,uid=1000,gid=1000,cache=strict
現在你應該可以訪問了
希望這可以幫助..
最近幾天我一直在尋找解決方案,我只是得到一個工作。
我在 ubuntu 虛擬機上運行 docker 容器,並且在運行 Windows 10 的同一網絡上的其他主機上映射文件夾,但我幾乎可以肯定運行容器的操作系統不是問題,因為映射來自容器本身,所以我認為這個解決方案應該適用於任何 SO。
讓我們編碼。
首先,您應該創建卷
docker volume create
--driver local
--opt type=cifs
--opt device=//<network-device-ip-folder>
--opt o=user=<your-user>,password=<your-pw>
<volume-name>
然后你必須從一個圖像運行一個容器
docker run
--name <desired-container-name>
-v <volume-name>:/<path-inside-container>
<image-name>
在此之后,容器正在運行並分配給它的卷,並映射到 . 您在其中任何一個文件夾中創建一些文件,它將自動復制到另一個。
如果有人想從 docker-compose 運行它,我把它留在這里
services:
<image-name>:
build:
context: .
container_name: <desired-container-name>
volumes:
- <volume-name>:/<path-inside-container>
...
volumes:
<volume-name>:
driver: local
driver_opts:
type: cifs
device: //<network-device-ip-folder>
o: "user=<your-user>,password=<your-pw>"
希望我能幫上忙
我會寫下我的決定。 我有一台 Synology NAS。 共享文件夾使用 smb 協議。 我設法通過以下方式連接它。 最重要的是編寫版本 1.0 (vers=1.0)。 沒有它是行不通的! 我試圖解決這個問題 2 天。
version: "3"
services:
redis:
image: redis
restart: always
container_name: 'redis'
command: redis-server
ports:
- '6379:6379'
environment:
TZ: "Europe/Moscow"
celery:
build:
context: .
dockerfile: celery.dockerfile
container_name: 'celery'
command: celery --broker redis://redis:6379 --result-backend redis://redis:6379 --app worker.celery_worker worker --loglevel info
privileged: true
environment:
TZ: "Europe/Moscow"
volumes:
- .:/code
- nas:/mnt/nas
links:
- redis
depends_on:
- redis
volumes:
nas:
driver: local
driver_opts:
type: cifs
o: username=user,password=pass,**vers=1.0**
device: "//192.168.10.10/main"
我有相同的場景,但對於 Windows docker 圖像。 我已經在 Windows Server 2016 上安裝了 docker EE。我已經將外部 SMB 共享安裝為“Z:”上的網絡驅動器,並嘗試在執行 docker run 命令時使用它。 但是 docker 容器無法找到路徑“Z:”。
嘗試了以下選項,但沒有一個起作用。 請指教:
選項 1: --volume "Z:\\repository:C:\\repository"
選項 2: --mount type=bind,source=Z:\\repository,target=C:\\repository
選項 3:--volume “\\\\IP-of-Remote-Server-SMB\\Shared-Storage\\repository:C:\\repository”
選項 4:--volume “\\\\FQDN-of-Remote-Server-SMB\\Shared-Storage\\repository:C:\\repository”
此外,特權模式似乎不適用於 Windows。
添加到@Александр Рублев 的解決方案中,為我解決此問題的技巧是重新配置 Synology NAS 以接受 docker 使用的 SMB 版本。 就我而言,我必須啟用 SMBv3
我知道這是舊的,但我在尋找類似的東西時發現了這個,但看到它正在收到其他人的評論,比如我自己,找到它的人。 我已經想出如何讓它在我花了一段時間才弄清楚的類似情況下工作。 這里的答案缺少一些我將包含的關鍵信息,可能是因為當時沒有這些信息
您可以使用與 CIFS 卷類似的方式創建 NFS 卷,只需進行一些更改。 我會列出兩者,以便可以並排查看
在WSL2上使用 NFS 時,您首先需要將 NFS 服務安裝到 Linux 主機操作系統中。 我相信 CIFS 需要一個類似的工具,很可能是@LevHaikin 提到的cifs-utils
,但由於我不使用它,所以我不確定。 在我的例子中,主機操作系統是 Ubuntu,但您應該能夠通過找到您的系統的nfs-common
(或cifs-utils
,如果正確的話)安裝的等價物來找到合適的操作系統
sudo apt update
sudo apt install nfs-common
就是這樣。 這將安裝該服務,以便 NFS 在 Docker 上工作(我花了很長時間才意識到這是問題所在,因為它似乎沒有在任何地方根據需要被提及)
如果使用 NFS,在 .network 設備上,您需要為 NFS 文件夾設置 NFS 權限,在我的例子中,這將在folder
夾中完成,然后掛載到其中的文件夾。 沒關系。 (在我的例子中,作為我服務器的 NAS 安裝到#IP#/volume1/folder
,在 NAS 中我從未在目錄結構中看到volume1
,但是當我設置時共享文件夾的完整路徑顯示在設置頁面中NFS 權限。我不包括volume1
部分,因為您的系統可能會有所不同)並且您需要 IP 之后的完整路徑(使用 IP 作為數字而不是主機名),根據您的 NFS 共享,無論它是什么是。
如果使用 CIFS 設備,則同樣適用於 CIFS 權限。
nolock
選項,但您的系統上可能沒有。 它只是禁用“鎖定”文件的能力。soft
選項表示如果系統無法連接到掛載目錄,它不會掛起。 如果您需要它僅在安裝存在時工作,您可以將其更改為hard
。rw
(讀/寫)選項用於Read/Write , ro
(只讀)用於Read Only由於我個人不使用 CIFS 卷,因此設置的選項只是我發現的示例中的選項,您需要研究它們是否必要。
username
和password
是必需的,並且必須包含在 CIFS 中uid
和gid
是 Linux 用戶和組設置,我相信應該設置為您的容器需要的內容,因為據我所知 Windows 沒有使用它們file_mode=0777
和dir_mode=0777
是 Linux 讀/寫權限,本質上類似於chmod 0777
,提供任何可以訪問文件的讀/寫/執行權限(更多信息鏈接 #4),這也應該適用於 Docker 容器而不是 CIFS 主機noexec
與執行權限有關,但我認為這里實際上不是 function,但它包含在我發現的大多數示例中, nosuid
限制了它訪問特定於特定用戶 ID 的文件的能力並且不需要刪除除非你知道你需要它,因為它是一種保護我建議盡可能保留它, nosetuids
意味着它不會為新創建的文件設置 UID 和 GUID, nodev
意味着無法訪問/創建安裝上的設備point, vers=1.0
我認為是兼容性的回退,我個人不會包含它,除非有問題或者沒有它就不能工作在這些示例中,我在讀/寫模式下將/.NET.WORK.DRIVE.IP/folder/on/addr/device
安裝到名為“ my-docker-volume
”的卷。 CIFS 卷使用用戶supercool
和密碼noboDyCanGue55
來自 CLI 的NFS
docker volume create --driver local --opt type=nfs --opt o=addr=NET.WORK.DRIVE.IP,nolock,rw,soft --opt device=:/folder/on/addr/device my-docker-volume
來自 CLI 的CIFS (如果 Docker 安裝在 Windows 以外的系統上,則可能無法工作,只會連接到 Windows 系統上的 IP)
docker volume create --driver local --opt type=cifs --opt o=user=supercool,password=noboDyCanGue55,rw --opt device=//NET.WORK.DRIVE.IP/folder/on/addr/device my-docker-volume
這也可以在 Docker Compose 或 Portainer 中完成。 當你在那里做的時候,你需要添加一個Volumes:
在組合文件的底部,沒有縮進,與services:
在此示例中,我正在安裝卷
my-nfs-volume
從//10.11.12.13/folder/on/NFS/device
到讀/寫模式下的“ my-nfs-volume
”並將其安裝在容器中到/nfs
//10.11.12.14/folder/on/CIFS/device
的my-cifs-volume
/cifs
my-cifs-volume
具有用戶supercool
的權限,密碼為noboDyCanGue55
version: '3'
services:
great-container:
image: imso/awesome/youknow:latest
container_name: totally_awesome
environment:
- PUID=1000
- PGID=1000
ports:
- 1234:5432
volumes:
- my-nfs-volume:/nfs
- my-cifs-volume:/cifs
volumes:
my-nfs-volume:
name: my-nfs-volume
driver_opts:
type: "nfs"
o: "addr=10.11.12.13,nolock,rw,soft"
device: ":/folder/on/NFS/device"
cifs-volume-test:
driver_opts:
type: "cifs"
o: "username=supercool,password=noboDyCanGue55,uid=1000,gid=1000,file_mode=0777,dir_mode=0777,noexec,nosuid,nosetuids,nodev,vers=1.0"
device: "//10.11.12.14/folder/on/CIFS/device/"
更多詳情可在這找到:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.