我需要设置一个Docker容器,在该容器中对文件系统的一部分进行加密。请不要纠缠于原因,答案是丑陋的,而且更多的是政治性的,而不是技术性的。
如果重要的话,要加密的特定部分将是从主机装载的卷,尽管我最初只是在容器的/tmp
中尝试。由于我们的部署工作方式,直接在容器外的卷上执行ecryptfs内容会很不方便;我想作为作为CMD
运行的shell脚本的一部分在内部进行装载。
如果我用--privileged
(感谢这个一次性注释)-运行容器,我可以做到这一点,但我不想授予它附带的一切。经过反复试验,我发现添加--cap-add IPC_LOCK
可以克服第一个无法理解的错误(Exiting. Unable to obtain passwd info
),但这个过程后来失败了:
mount: block device /tmp/enc is write-protected, mounting read-only
mount: cannot mount block device /tmp/enc read-only
Error mounting eCryptfs: [-1] Operation not permitted
Check your system logs; visit <http://ecryptfs.org/support.html>
添加所有功能在这里没有帮助——问题出在其他地方。
docker运行的文档表示,--privileged
还消除了与--device
参数相关的障碍,将fuse作为需要设置--device
的示例,并在"之前"示例中显示了类似的外观错误。ecryptfs和fuse似乎有一定的共同点,所以这感觉是一个很好的线索。
我尝试将--device /tmp/enc
添加到我的docker run
命令中,但没有成功(主机不知道这个路径,这是有道理的)。我还注意到有一个/dev/ecryptfs
(尽管我不知道它能做什么),并尝试了一下。容器已运行,但ecryptfs装载不起作用。
令人担忧的是,这似乎无法实现。。。有什么想法吗?
docker使用的实际存储驱动程序似乎不适用于eCryptFS。
请在存储库中检查这些问题。