我试图向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@H_404_28@所以有可能你有不同的事情.无论如何,这是什么解决了我的问题:
默认情况下,FUSE仅允许安装文件系统的用户访问该文件系统.当您运行Docker容器时,该容器最初以root身份运行.
安装FUSE文件系统时,可以使用allow_root或allow_other mount选项.例如:
$encfs -o allow_root /encrypted /other@H_404_28@这里,allow_root将允许root用户访问挂载点,而allow_other将允许任何人访问安装点(只要目录中的Unix权限允许他们访问).
如果我使用allow_root通过encfs filesytem安装,那么我可以将该文件系统作为Docker卷进行公开,并且该文件系统的内容从容器内部正确显示.