2017-06-01 92 views
0

我正在配置Docker撰写文件以启动和集成多个服务。在Docker中使用非虚拟文件夹撰写为卷

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

在这样做时,所有nessessary文件夹的文件夹中创建我跑码头工人,组成了

问题1:此文件夹没有通用权限,并且docker无法存储/写入所有信息,并且容器引发错误。这些文件夹需要哪些权限(Windows,Linux)?

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

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

在此设置了卷上的数据文件夹虚拟机中创建和容器可以写/没有问题读取所有数据。但是这些文件夹以某种方式隐藏在Windows的Hyper-V环境中。

问题2:如何在本节中定义名为卷,以便它们指向物理驱动器(Windows,Linux)上虚拟机之外的定义文件夹?

回答

0

问题1:此文件夹没有通用权限,并且docker无法存储/写入所有信息,并且容器引发错误。这些文件夹需要哪些权限(Windows,Linux)?

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

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

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

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