linux – 不能将基于保险丝的卷暴露给Docker容器

我试图向Docker容器提供一卷加密的文件系统供内部使用.
想法是容器将像往常一样写入卷,但事实上,主机将在将数据写入文件系统之前对其进行加密.

我正在尝试使用EncFS – 它在主机上运行良好,例如:

encfs /encrypted /visible

我可以将文件写入/可见,那些被加密.
但是,当尝试运行具有/可见的容器的容器时,例如:

docker run -i -t –privileged -v /visible:/myvolume imagename bash

我在容器中得到一个卷,但它是在原始/加密的文件夹,而不是通过EncFS.如果我从/ visible卸载了EncFS,我可以看到容器写入的文件.不用说/加密是空的.

有没有办法让Docker通过EncFS安装卷,而不是直接写入文件夹?
相比之下,当我使用NFS挂载作为卷时,docker工作正常.它写入网络设备,而不是我装载设备的本地文件夹.

谢谢

最佳答案
我无法在本地复制您的问题.如果我尝试将encfs文件系统作为Docker卷公开,那么尝试启动容器时出错:

FATA[0003] Error response from daemon: Cannot start container <cid>:
setup mount namespace stat /visible: permission denied 

所以有可能你有不同的事情.无论如何,这是什么解决了我的问题:

默认情况下,FUSE仅允许安装文件系统的用户访问该文件系统.当您运行Docker容器时,该容器最初以root身份运行.

安装FUSE文件系统时,可以使用allow_root或allow_other mount选项.例如:

$encfs -o allow_root /encrypted /other

这里,allow_root将允许root用户访问挂载点,而allow_other将允许任何人访问安装点(只要目录中的Unix权限允许他们访问).

如果我使用allow_root通过encfs filesytem安装,那么我可以将该文件系统作为Docker卷进行公开,并且该文件系统的内容从容器内部正确显示.

转载注明原文:linux – 不能将基于保险丝的卷暴露给Docker容器 - 代码日志