Featured image of post windows共享目录挂载到容器中使用

windows共享目录挂载到容器中使用

容器中怎么挂载Windows的共享目录?

什么是Windows共享目录?

Windows 的共享文件夹主要通过 SMB(Server Message Block) 协议来实现。SMB协议最初由IBM开发用于在网络上共享文件、打印机等资源。后来微软将其纳入了 Windows 操作系统,并加入了自己的扩展和改进。

Linux 系统可以读写 Windows 共享文件夹,因为 Linux 也支持 SMB 协议。常见的实现有:

  1. Samba:Samba 是在 Linux 和 Unix 系统上的一个开源软件套件,可以让 Linux 系统加入 Windows 文件和打印机共享服务。它既可以作为服务器共享文件给 Windows 客户端,也可以作为客户端访问 Windows 共享资源。
  2. CIFS(通用互联网文件系统):CIFS 是微软对 SMB 协议的进一步扩展和改进,在网络上提供文件共享服务。大多数现代 Linux 发行版都内置了对 CIFS 的支持,可以在文件管理器中直接输入 Windows 共享路径来挂载访问。

要在 Linux 上挂载访问 Windows 共享文件夹,通常使用下面的命令:

1
mount -t cifs //WindowsIP/ShareName /mnt/ShareFolder -o username=user,password=pw

其中 WindowsIP 是 Windows 机器 IP,ShareName 是共享文件夹名称,/mnt/ShareFolder 是挂载到 Linux 的本地目录路径。

总的来说,SMB/CIFS 是 Windows 和 Linux 之间实现文件共享的标准协议,Linux 通过内置的 CIFS 支持或安装 Samba 软件包,就可以方便地访问 Windows 共享文件夹。

容器上的具体实现过程

基础镜像需要引入cifs的组件:

1
RUN dnf install -y cifs-utils

由于容器安全性的限制,容器里面使用mount是被限制的,我们启动的时候需要增加--cap-add SYS_ADMIN--cap-add DAC_READ_SEARCH参数具体如下:

1
docker run [you_options...] --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH -d [image]

如果是swarm里面的service:

1
docker service create [you_options...] --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH -d [image]

然后你就可以在容器中进行挂载了(一般来说这个步骤都是由程序自己通过读取配置自动完成)

1
2
mkdir /mnt/[ShareFolder]
mount -t cifs //WindowsIP/ShareName /mnt/ShareFolder -o username=user,password=pw

此时就可以从容器中像读取本地文件一样读取(或者读写)共享目录了。