[英]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.