是否可以使用凭证文件针对本地驱动程序安装CIFS卷?

时间:2019-01-05 20:55:15

标签: docker

我知道像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

但是,当我尝试使用该卷时,我在Docker日志文件中得到了CIFS VFS: No username specified

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

是否有一种无需指定凭据即可创建CIFS卷的方法?

1 个答案:

答案 0 :(得分:2)

我只是深入研究它以找出它不起作用的原因。这里的问题似乎是凭证文件是包装二进制文件“mount.cifs”的一个特性,而 docker 使用 systemcall SYS_MOUNT 本身来安装卷:

如果您查看 the linux kernel's cifs extension,它会说:

<块引用>

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

您可以将其追溯到 source code of the mount.cifs executable,您可以在其中找到读取凭据文件的代码。

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

相关问题