我需要设置一个Docker容器,其中部分文件系统是加密的。请不要纠缠于为什么,答案是丑陋的,更具政治性而非技术性。
如果重要,要加密的特定部分将是来自主机的卷装载,尽管我最初只是在容器的/tmp
中尝试这样做。由于我们的部署工作方式,直接在容器外部的卷上做ecryptfs东西是不方便的;我希望在作为CMD
运行的shell脚本的一部分内部执行mount。
如果我使用--privileged
(感谢this throwaway comment) - 运行容器,我可以这样做,但我不想授予附带的所有内容。通过反复试验,我发现添加--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-run docs说--privileged
也取消了与--device
参数相关的障碍,给出了 fuse 作为需要{{1}的示例设置,并在“之前”示例中显示相似的看起来错误。 ecryptfs和fuse似乎有一定的共同点,所以这感觉就像一个很好的线索。
我尝试将--device
添加到我的--device /tmp/enc
命令中,但无济于事(主机不了解此路径,这是有意义的)。我也注意到有一个docker run
(虽然我不知道它做了什么)并试过了。容器运行,但ecryptfs mount不起作用。
开始似乎令人担忧,好像这样做不可能......有什么想法吗?