Docker 更改现有堆​​栈以从用户命名空间开始,但保留图像、卷和容器

Docker 更改现有堆​​栈以从用户命名空间开始,但保留图像、卷和容器

为了缓解容器对其主机的 root 访问权限问题,我喜欢按照 docker 文档的建议,使用命名空间启动 docker 服务。我这样做了

sudo adduser dockremap
sudo sh -c 'echo dockremap:500000:65536 > /etc/subuid'
sudo sh -c 'echo dockremap:500000:65536 > /etc/subgid'
sudo vim /etc/docker/daemon.json
   {
     "userns-remap": "dockremap"
   }
sudo service docker restart

虽然这导致了在映射到主机上的 dockremap 的容器内拥有 root 权限的期望行为,但我再也无法看到之前创建的所有图像和容器。

问题: 是否可以像所示那样重新启动 docker 守护进程,但保留我的所有卷、图像和容器?如果不能,还有什么建议吗(docker rootless、apparmore groups <- 很难找到开始)

答案1

不,不可能。来自Docker 关于用户命名空间的文档

启用可userns-remap有效屏蔽现有镜像和容器层,以及 中的其他 Docker 对象/var/lib/docker/。这是因为 Docker 需要调整这些资源的所有权,并实际将它们存储在 中的子目录中/var/lib/docker/。最好在新的 Docker 安装上启用此功能,而不是在现有的 Docker 安装上。

Docker 希望简化这一过程,但在文件系统级别,文件的 uid/gid 无法以与文件系统无关的方式透明地映射。有人在努力添加此功能,其中最明显的进展是无根开发。值得关注的包括 shiftfs、fuse-overlayfs 和类似项目背后的努力。

相关内容