我需要设置一个 Docker 容器,其中文件系统的一部分是加密的。请让我们不要纠缠于为什么,答案是丑陋的,比技术更政治化。
万一这很重要,要加密的特定部分将是来自主机的卷挂载,尽管我最初只是在容器的/tmp
. 由于我们的部署工作方式,直接在容器外的卷上执行 ecryptfs 操作会很不方便;我想在内部进行挂载,作为 shell 脚本的一部分,以CMD
.
只要我运行容器--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-run 文档说,这--privileged
也消除了与--device
参数相关的障碍,以fuse作为需要--device
设置的东西的示例,并在“之前”示例中显示了相当相似的错误。ecryptfs 和 fuse 似乎有一定的共同点,所以这感觉是一个很好的线索。
我尝试添加--device /tmp/enc
到我的docker run
命令中,但无济于事(主机不知道此路径,这是有道理的)。我还注意到有一个/dev/ecryptfs
(虽然我不知道它是做什么的)并尝试了。容器运行,但 ecryptfs 挂载不起作用。
它开始令人担忧,好像这无法完成......有什么想法吗?