我需要设置一个Docker容器,其中对文件系统的一部分进行了加密。请让我们不去解释为什么,答案是丑陋的,而不是技术性的,更具政治性。
万一重要,要加密的特定部分将是从主机进行的卷装载,尽管我最初只是在容器的/tmp
中尝试了这一点。由于我们的部署方式有效,因此直接在容器外部的卷上执行ecryptfs的操作很不方便;我想作为CMD
运行的shell脚本的一部分进行内部安装。
我可以用--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>
添加所有功能在这里无济于事-问题出在其他地方。
jetty 运行的文档说,
--privileged
还消除了与--device
参数有关的障碍,给出了 fuse 作为需要--device
设置的示例,并在“之前”示例中显示了类似的外观错误。 ecryptf和fuse似乎有一定的共同点,因此这是一个很好的线索。我尝试将
--device /tmp/enc
添加到我的docker run
命令中,但无济于事(主机不知道该路径,这很有意义)。我还注意到有一个/dev/ecryptfs
(尽管我不知道它的作用),然后尝试了一下。容器已运行,但无法进行ecryptfs挂载。似乎开始令人担忧,好像这无法完成...有什么想法吗?
最佳答案
看来docker使用的实际存储驱动程序在eCryptFS上不起作用。
检查these问题in the存储库。
关于linux - 在没有--privileged的情况下在Docker内部使用ecryptfs。 --device的适当值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33924422/