Docker将网络驱动器添加为Windows上的卷

5jvtdoz2  于 2022-11-22  发布在  Docker
关注(0)|答案(3)|浏览(165)

我正在尝试将网络驱动器挂接为卷。这是我正在尝试的命令

docker run -v //NetworkDirectory/Folder:/data alpine ls /data

我正在Windows上运行此命令,数据目录将为空。如何将此网络目录作为卷装载到Windows主机上并在容器内访问它?
使用本地目录可以正常工作,因此下面的命令可以正常工作。

docker run -v c:/Users/:/data alpine ls /data

我可以让它在linux中工作,因为我可以在本地目录上使用cifs-utils挂载共享,并将该目录用作卷。
编辑:看起来这是不可能的:How to mount network Volume in Docker for Windows (Windows 10)

c86crjj0

c86crjj01#

我的同事想出了这个,它与我们公司的网络驱动器一起工作,它可能会帮助外面的人。
我们首先创建一个名为mydockervolume的Docker卷。

docker volume create --driver local --opt type=cifs --opt device=//networkdrive-ip/Folder --opt o=user=yourusername,domain=yourdomain,password=yourpassword mydockervolume
  • --driver指定卷驱动程序名称
  • --opt设置驱动程序特定的选项。我猜它们是在容器启动时提供给linux mount命令的。

然后,我们可以测试卷是否与
docker run -v mydockervolume:/data alpine ls /data
Here you can read more about driver specific options and docker volume create

8dtrkrch

8dtrkrch2#

我在Docker上找不到本机CIFS存储驱动程序。
您可以使用如下外部宗卷插件:https://github.com/ContainX/docker-volume-netshare,支持NFS、AWS EFS和桑巴舞/CIFS

tez616oj

tez616oj3#

我在寻找类似的东西时发现了这一点,但发现虽然它很旧,但缺少一些关键信息,可能是因为当时没有这些信息
我认为CIFS存储仅适用于连接到Windows系统时,因为我认为Linux根本不使用它。
NFS也可以做到这一点,它的安全性较低,但几乎所有东西都支持它。
您可以使用与CIFS卷类似的方式创建NFS卷,只是需要做一些更改。
在WSL 2上使用NFS时,首先需要将NFS服务安装到Linux主机操作系统中。我认为CIFS需要类似的服务,但由于我没有使用它,因此我不确定。在我的情况下,这是Ubuntu,但您应该能够通过查找您的系统等效项来找到合适的服务

sudo apt update
sudo apt install nfs-common

就是这样。这将安装服务,使NFS工作在Docker(它花了我永远意识到,因为它似乎没有提到需要的任何地方)
在设备上,您需要为NFS文件夹设置NFS权限,在我的情况下,这将在folder文件夹中完成,挂载是其中的一个文件夹。这很好。在我的情况下,NAS(即我的服务器)挂载到NAS中的#IP#/volume1/folder,我在目录结构中从未看到volume1。但是当我设置NFS权限时,它会显示在设置页面中。我没有包括volume1部分,因为您的系统可能会有所不同&根据您的NFS共享,您需要IP后的完整路径,无论它是什么。

  • nolock选项经常需要,但可能不在您的系统上。它只是禁用“锁定”文件的功能。
  • soft选项意味着如果系统无法连接到挂载目录,它将不会挂起。如果您需要它只在挂载目录存在时才工作,您可以将其改为hard
  • rw(读/写)选项用于***读/写***,ro(只读)用于***只读***

由于我个人并不使用CIFS卷,因此设置的选项只是我找到的示例中的选项,您需要了解这些选项是否必要。

  • usernamepassword是必需的,并且必须包含在CIFS中
  • uidgid是Linux用户和组设置,我认为应该设置为您的容器所需要的,因为据我所知,Windows不使用它们
  • file_mode=0777dir_mode=0777是Linux读/写权限,本质上是chmod 0777,提供可以访问文件的任何内容的读/写/执行权限(详细信息链接#4)&这也适用于Docker容器,而不是CIFS主机
  • noexec与执行权限有关,但我不认为它在这里实际上起作用,nosuid限制它访问特定于特定用户ID的文件的能力,除非您知道需要删除,否则不应删除,nosetuids意味着它不会为新创建的文件设置UID和GUID,nodev意味着无法访问/创建装载点上的设备,vers=1.0我认为是兼容性的一个备用选项,我个人不会包含它,除非出现问题或没有它就无法工作

在这些示例中,我以读/写模式将//NET.WORK.DRIVE.IP/folder/on/addr/device装载到名为“my-docker-volume“的卷。CIFS卷使用用户supercool和密码noboDyCanGue55

NFS通过CLI

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

CIFS从CLI(如果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“,并将容器中的my-nfs-volume装载到/nfs
  • my-cifs-volume//10.11.12.14/folder/on/CIFS/device(具有来自用户supercool的权限,密码为noboDyCanGue55)以读/写模式访问“my-cifs-volume“,并将容器中的该内容装载到/cifs
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/"

更多详细信息,请访问:

  1. https://docs.docker.com/engine/reference/commandline/volume_create/
  2. https://www.thegeekdiary.com/common-nfs-mount-options-in-linux/
  3. https://web.mit.edu/rhel-doc/5/RHEL-5-manual/Deployment_Guide-en-US/s1-nfs-client-config-options.html
  4. https://www.maketecheasier.com/file-permissions-what-does-chmod-777-means/

相关问题