在Docker容器中装入SMB / CIFS共享

我有一个在Docker容器中运行的Web应用程序。 此应用程序需要访问我们公司文件服务器上的某些文件(带有Active Directory域控制器的Windows Server)。 我试图访问的文件是为我们的客户创build的图像文件,Web应用程序显示它们作为客户端组合的一部分。

在我的开发机器上,我通过/etc/fstab条目装载了相应的文件夹,并且通过--volume参数将主机装入点装载到Docker容器中。 这完美的作品。

现在,我正在尝试将一个生产容器放在一起,这个容器将运行在不同的服务器上,并且不依赖主机上挂载CIFS共享。 所以我试图将相应的条目添加到容器中的/etc/fstab文件中,并使用mount -a装入它们。 我得到mount error(13): Permission denied

网上的一些研究让我看到了关于Docker安全的文章 。 如果我正确地阅读这个,看起来Docker明确地拒绝在容器中装载文件系统的能力。 我尝试以只读方式挂载共享,但是(不出意外)也失败了。

所以,我有两个问题:

  1. 我正确的理解,Docker阻止任何使用内部容器装载?

  2. 任何人都可以想到另一种方式来实现这一点, 而无需在主机上安装CIFS共享,然后将主机文件夹挂载到Docker容器中?

Solutions Collecting From Web of "在Docker容器中装入SMB / CIFS共享"

是的,作为安全措施,Docker阻止您在容器内安装远程卷。 如果您信任您的映像以及运行这些映像的人员,则可以在--privileged docker run使用--privileged标志来禁用这些安全措施。

此外,您可以将--cap-add--cap-drop组合起来, --cap-drop容器提供实际所需的功能。 (请参阅文档) SYS_ADMIN功能是授予挂载特权的功能。

  1. 在容器中有一个关闭的问题mount.cifs

https://github.com/docker/docker/issues/22197

据此加入

--cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH

运行选项将使mount -t cifs正常运行。

我试了一下,并且:

mount -t cifs //<host>/<path> /<localpath> -o user=<user>,password=<user>

在容器内工作