在Docker中使用非虚拟文件夹作为卷

我正在configurationDocker撰写文件,以启动和集成多个服务。

version: '3' services: db: ... volumes: - ./data/mariadb:/var/lib/mysql ... solr: ... volumes: - ./data/solr/:/opt/solr/server/solr/mycores ... 

当这样做,所有nessessary文件夹在运行docker-compose的文件夹内创build。

问题1:这个文件夹没有通用的权限,docker不能存储/写入所有的信息,容器会抛出错误。 这些文件夹需要哪些权限(Windows,Linux)?

作为第二种方法,我使用卷定义来创build数据存储。

 version: '3' services: db: ... volumes: - mariadb:/var/lib/mysql ... solr: ... volumes: - solr:/opt/solr/server/solr/mycores ... volumes: mariadb: solr: 

在此设置中,卷的数据文件夹在虚拟机内创build,容器可以无障碍地写入/读取所有数据。 但是这些文件夹以某种方式隐藏在Windows的Hyper-V环境中。

问题2:如何在本节中定义命名卷,使其指向我的物理驱动器(Windows,Linux)上虚拟机之外的已定义文件夹?

问题1:这个文件夹没有通用的权限,docker不能存储/写入所有的信息,容器会抛出错误。 这些文件夹需要哪些权限(Windows,Linux)?

主机上的目录需要设置权限位,以便容器内的用户可以写入。 由于不同的/ etc / passwd和/ etc / group文件,容器内和主机上的用户名和组名的映射可能不同。 因此,在主机上configuration权限时,需要根据容器内用户的uid和gid设置权限。

问题2:如何在本节中定义命名卷,使其指向我的物理驱动器(Windows,Linux)上虚拟机之外的已定义文件夹?

如果您不使用命名卷,则在主机上的目录上设置权限没有解决方法。 命名卷没有这个问题的唯一原因是因为它们被初始化为映像的权限和所有权(以及目录内容),当它们是空的或创build并附加到容器时。 主机卷(也称为绑定挂载)没有此初始化function。

如果您需要通过名称而不是通过特定用例的path来引用卷,则会有一个名为local persist的插件可以解决您的问题。 我还没有遇到这种情况需要,所以我没有任何反馈,如何工作。