我有一个在Docker容器中运行的Web应用程序。 此应用程序需要访问我们公司文件服务器上的某些文件(带有Active Directory域控制器的Windows Server)。 我试图访问的文件是为我们的客户创build的图像文件,Web应用程序显示它们作为客户端组合的一部分。
在我的开发机器上,我通过/etc/fstab
条目装载了相应的文件夹,并且通过--volume
参数将主机装入点装载到Docker容器中。 这完美的作品。
现在,我正在尝试将一个生产容器放在一起,这个容器将运行在不同的服务器上,并且不依赖主机上挂载的CIFS共享。 所以我试图将相应的条目添加到容器中的/etc/fstab
文件中,并使用mount -a
装入它们。 我得到mount error(13): Permission denied
。
网上的一些研究让我看到了关于Docker安全的文章 。 如果我正确地阅读这个,看起来Docker明确地拒绝在容器中装载文件系统的能力。 我尝试以只读方式挂载共享,但是(不出意外)也失败了。
所以,我有两个问题:
我正确的理解,Docker阻止任何使用内部容器装载?
任何人都可以想到另一种方式来实现这一点, 而无需在主机上安装CIFS共享,然后将主机文件夹挂载到Docker容器中?
是的,作为安全措施,Docker阻止您在容器内安装远程卷。 如果您信任您的映像以及运行这些映像的人员,则可以在--privileged
docker run
使用--privileged
标志来禁用这些安全措施。
此外,您可以将--cap-add
和--cap-drop
组合起来, --cap-drop
容器提供实际所需的功能。 (请参阅文档) SYS_ADMIN
功能是授予挂载特权的功能。
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>
在容器内工作