使用Docker中的非虚拟文件夹撰写为卷

时间:2017-06-01 07:44:54

标签: docker docker-compose

我正在配置Docker撰写文件,以便启动和集成多个服务。

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

执行此操作时,所有nessessary文件夹都在我运行 docker-compose up 的文件夹中创建。

问题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)上VM外部的已定义文件夹?

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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

如果您需要按名称而不是特定用例的路径引用卷,那么有一个名为local persist的插件可以解决您的问题。我还没有遇到需要这样做的情况,所以我对它的运作情况没有任何反馈。