我知道像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卷的方法?
答案 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 系统调用,否则这将不起作用。