docker - 是否可以使用凭据文件针对 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 specified
Docker 日志文件中的卷时。
我尝试通过包含用户名(--opt o=credentials=/root/.cifs,username=docker01,vers=3.0
)来修改音量参数,但这只会导致0xc000006d STATUS_LOGON_FAILURE
有没有一种方法可以创建 CIFS 卷而无需内联指定凭据?
解决方案
我只是深入研究了它以找出它为什么不起作用。这里的问题似乎是凭证文件是包装二进制文件“mount.cifs”的一个功能,而 docker使用系统调用 SYS_MOUNT本身来安装卷:
如果您查看linux 内核的 cifs 扩展,它会说:
使用挂载助手 mount.cifs 时,可以通过替代机制指定密码,而不是在 -o 之后使用命令行上的普通“pass=”语法指定密码:
您可以将其追溯到 mount.cifs 可执行文件的源代码,您可以在其中找到读取凭证文件的代码。
由此我得出结论,除非您将 docker 源代码更改为使用 mount.cifs 可执行文件而不是 linux 系统调用,否则这将不起作用。