首页 > 解决方案 > 是否可以使用凭据文件针对 LOCAL 驱动程序安装 CIFS 卷?

问题描述

我知道docker-volume-netshare存在类似的插件,并且我过去曾使用过它们,但对于这个项目,我仅限于本地驱动程序。

我可以通过传统意义上的本地驱动程序成功创建和使用 CIFS 卷(将用户名/密码内联传递给它),但现在我想通过凭据文件传递凭据。Docker 文档说它支持与 mount 类似的命令,因此,为此,我一直在尝试传递凭据,就像我通过mount命令挂载它一样。

我有一个/root/.cifs文件。

username=myusername
password=mypassword 

然后我通过手动挂载进行了测试

mount -t cifs \
-o credentials=/root/.cifs,vers=3.0 \
//192.168.76.20/docker_01 /mnt

它工作成功,我可以读/写数据。所以现在我尝试使用相同的逻辑创建 docker 卷。

docker volume create \
--driver local \
--name persistent \
--opt type=cifs \
--opt device=//192.168.76.20/docker_01 \
--opt o=credentials=/root/.cifs,vers=3.0

但是,当我尝试使用CIFS VFS: No username specifiedDocker 日志文件中的卷时。

我尝试通过包含用户名(--opt o=credentials=/root/.cifs,username=docker01,vers=3.0)来修改音量参数,但这只会导致0xc000006d STATUS_LOGON_FAILURE

有没有一种方法可以创建 CIFS 卷而无需内联指定凭据?

标签: docker

解决方案


我只是深入研究了它以找出它为什么不起作用。这里的问题似乎是凭证文件是包装二进制文件“mount.cifs”的一个功能,而 docker使用系统调用 SYS_MOUNT本身来安装卷:

如果您查看linux 内核的 cifs 扩展,它会说:

使用挂载助手 mount.cifs 时,可以通过替代机制指定密码,而不是在 -o 之后使用命令行上的普通“pass=”语法指定密码:

您可以将其追溯到 mount.cifs 可执行文件的源代码,您可以在其中找到读取凭证文件的代码。

由此我得出结论,除非您将 docker 源代码更改为使用 mount.cifs 可执行文件而不是 linux 系统调用,否则这将不起作用。


推荐阅读