2

我想要一个 Docker 容器,它有一个主机无法访问的存储卷。

我遵循了这个指南,它使用docker-lvm-plugin插件来安装一个 LUKS crypt 卷。通过对方法的一些修改,我最终这样做了:

apt install lvm2
apt install xfsprogs
pvcreate /dev/sdb
vgcreate docker /dev/sdb
lvcreate -L 15G -T docker/internal
lvcreate -L 30G -T docker/volumes
mkdir -p /var/run/key
mount -t ramfs -o size=4M ramfs /var/run/key
dd if=/dev/urandom of=/var/run/key/key.bin bs=1024 count=16
apt install cryptsetup
docker volume create --driver lvm --name cryptvol --opt size=100M --opt crypt=luks --opt keyfile=/var/run/key/key.bin
docker run -d --name container -v cryptvol:/home alpine tail -f /dev/null

但是我可以这样做:

$ docker exec -it container sh -c 'echo hello > /home/hello.txt'
$ # hello.txt is readable inside container
$ docker exec -it container -c 'cat /home/hello.txt'
hello
$ # hello.txt ALSO readable outside container
$ cat /var/lib/docker-lvm-plugin/cryptvol/hello.txt
hello

似乎加密卷的内容对主机是可见的。

是否可以在主机无法访问的 Docker 容器中拥有加密卷?

4

2 回答 2

3

不。

Docker 不是 VM 工具,它运行应用了隔离(命名空间)和资源限制(cgroup)的应用程序。运行在同一内核上的主机进程不会以这些限制运行,因此可以看到容器的内容。即使在主机上以某种方式受限,主机上的 root(以及 docker 组中的任何用户)也可以进入容器的命名空间。

于 2019-11-06T20:33:52.693 回答
0

完全同态加密 (FHE) 确实实现了这一点,但它仍在积极研究中。

它不是特定于卷的,但您可以通过 Docker 映像测试 IBM HELayers 实现,例如https://github.com/ibm/fhe-toolkit-linux

于 2021-12-08T20:26:44.993 回答