假设我有一个以非 root 用户运行的容器,并且我想将主机中的卷目录绑定(bind)挂载到该容器中。然后容器将写入该目录。比如说主机上的目录是/tmp/container/data
.如果该路径是 不是 存在于主机上,我观察到它是使用所有权根创建的(由 docker)。因此,容器无法向该目录写入任何内容(访问被拒绝),因为我的容器没有使用 root 用户运行。
当然,我可以负责创建 /tmp/container/data
在启动容器之前在主机端具有正确权限的目录,但这个解决方案显然不能扩展 - 我必须为每个容器都这样做.
所以我的问题是,将主机中的绑定(bind)卷用于尚不存在的目录的最佳方法是什么,同时仍然让非根容器对该卷具有写访问权限。
最佳答案
您准确地描述了 docker 的正常行为,来自 docker 引擎的不存在的绑定(bind)挂载将被初始化为 root 拥有的空目录。请注意,在 swarm 模式下不会发生这种情况,而是无法在主机上调度容器。
用于避免这种情况的选项包括:
关于docker - 将不存在的主机目录挂载到非根容器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44574078/