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

Sal*_*n P 8 docker docker-volume

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

docker run -v //NetworkDirectory/Folder:/data alpine ls /data
Run Code Online (Sandbox Code Playgroud)

我在Windows上运行此命令,并且数据目录显示为空。如何在Windows主机上将该网络目录作为卷挂载并在容器内访问它?

使用本地目录可以正常工作,因此以下命令可以正常工作。

docker run -v c:/Users/:/data alpine ls /data
Run Code Online (Sandbox Code Playgroud)

我可以使其在Linux中工作,因为我可以将cifs-utils共享安装在本地目录上,并将该目录用作卷。

编辑:看起来这是不可能的:如何在Docker for Windows(Windows 10)中安装网络卷

Mar*_*man 7

我的同事想出了这一点,它可以与我们公司的网络驱动器一起使用,可能会帮助某个人。

我们首先创建一个名为的Docker卷mydockervolume

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

然后,我们可以测试该音量是否与
docker run -v mydockervolume:/data alpine ls /data

在这里您可以阅读有关驱动程序特定选项和Docker卷创建的更多信息

  • 我仔细地遵循了这一点。`docker volume create` 发生时没有错误(但我不知道它是否检查太多)。尝试进行 docker 测试运行导致出现“无效参数”消息。无法挂载本地卷。 (3认同)
  • 解释这些工具的功能以及在哪里测试它们可能会有所帮助。从短语“我的同事给我这个”看来,您没有经过测试,只是问了一下... (2认同)
  • @JulioCezarSilva我试图解释更多。我自己使用此代码,因为无法在当前计算机上本地装载卷(没有管理员和防火墙设置)。 (2认同)
  • 这仅适用于 Linux,对吗?由于 Windows 卷命令不支持任何选项。这个问题的标题说的是windows。 (2认同)
  • @Json 据我所知,这仅适用于 Linux 容器(alpine 是 linux)。主机是一台 Windows 机器,因为我使用 Windows 电脑进行开发。 (2认同)

Los*_*ine 5

我在寻找类似的东西时发现了这一点,但发现虽然它很旧,但缺少一些关键信息,可能是因为它们当时不可用

我认为 CIFS 存储仅适用于连接到Windows 系统的情况,因为我认为 Linux 根本不使用它。

编辑:看起来 Docker 认为SMB(Samba)CIFS 卷

同样的事情也可以用 NFS 来完成,虽然安全性较低,但几乎所有东西都支持。

您可以使用与 CIFS 类似的方式创建 NFS 卷,只需进行一些更改。我将列出两者,以便可以并排看到它们

在 WSL2 上使用 NFS 时,您首先需要将NFS服务安装到 Linux 主机操作系统中。我相信 CIFS 需要类似的,但由于我不使用它,所以我不确定。

编辑:看起来至少对于SMB(Samba)来说 WSL2 Docker ,CIFS 卷要么不需要任何依赖项,要么我已经有了它们,可能与我为 NFS 安装的相同

就我而言,主机操作系统是 Ubuntu,但您应该能够通过查找系统的等效nfs-common安装来找到合适的操作系统

sudo apt update
sudo apt install nfs-common
Run Code Online (Sandbox Code Playgroud)

就是这样。这将安装该服务,以便 NFS 在 Docker 上运行(我花了很长时间才意识到这是问题所在,因为似乎在任何地方都没有提到它)


在网络设备上,您需要为 NFS 文件夹设置 NFS 权限,在我的例子中,这将在挂载的文件夹中完成,folder然后再挂载到其中的文件夹。没关系。就我而言,我的服务器挂载到 NAS #IP#/volume1/folder,在 NAS 中我从未volume1在目录结构中看到 ,但当我设置 NFS 权限时,共享文件夹的完整路径会显示在设置页面中。我不包括该部分,因为您的系统可能会有所不同,并且根据您的 NFS 共享(无论它是什么),volume1您需要 IP 之后的完整路径(使用 IP 作为数字而不是主机名) 。

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

由于我个人不使用 CIFS 卷,因此选项集只是我找到的示例中的选项,您需要研究它们是否必要。

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

在这些示例中,我在读/写模式下安装//NET.WORK.DRIVE.IP/folder/on/addr/device到名为“”的卷。CIFS 卷正在使用带密码的my-docker-volume用户supercoolnoboDyCanGue55

来自 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这也可以在 Docker Compose 或 Portainer 中完成。当您在那里执行此操作时,您需要Volumes:在撰写文件的底部添加一个,没有缩进,与services:

在此示例中,我正在安装卷

  • my-nfs-volume在读/写模式下从//10.11.12.13/folder/on/NFS/device到“ my-nfs-volume”并将其安装在容器中/nfs
  • my-cifs-volume从具有密码的//10.11.12.14/folder/on/CIFS/device用户权限到“读/写模式”并将其安装到容器中supercoolnoboDyCanGue55my-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"
  my-cifs-volume:
    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/"
Run Code Online (Sandbox Code Playgroud)

更多详情可在这找到:

  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/