Dockers:外部驱动器作为OSX中的共享卷,权限

时间:2016-05-25 10:21:40

标签: macos docker permissions

首先让我描述一下我正在研究的系统。

简介

  • 我有一台装有小型SSD硬盘的Mac。系统包含不同的 用作分离码头工人的数据分析工具。
  • Docker for OSX不直接在系统上运行,它需要一个 基于linux的虚拟机,在内部运行docker。
  • 其中一些工具存储了大量数据(几TB),这意味着内部硬盘不够,因此我们需要将数据存储在外部媒体中。

因此,对于每个docker,分离数据存储(数据库)和系统文件(OS +工具源)会很有趣。数据库必须存储在外部HDD中。

我所做的是:

  1. 在OSX和基于Linux的VM(docker的主机)之间的外部HDD上创建共享目录。我们假设此目录已安装在Linux VM中的" / data"

  2. 然后,在创建泊坞窗时,使用" / data"来自主机的目录作为安装在" / data"码头工人的目录。如果我 ssh 到其中一个已创建的泊坞窗并列出" / data"的内容dir,我可以看到外置硬盘的内容。这样可行。

  3. 此时出现问题,并且与允许相关。

    问题

    考虑到:

    • 在OSX,我们的用户是 peterfoo

    • 在码头工人处,主要用户也是 peterfoo ,但我们可能有不同系统服务的次要用户。例如,如果我们安装MYSQL,MySQL服务将默认由用户 mysql 执行,所有文件都属于该用户。

    • 我想更改MySQL数据目录以强制所有数据都存储在" / data"目录(即在外部硬盘驱动器上)

    如果我使用用户 peterfoo ,则没有问题:我可以在" / data"中编写文件,读取文件,删除和创建目录等。来自docker的目录(外部HDD)。但是,使用不同的用户,系统不允许写入,这意味着当 mysql 用户尝试从新位置写入/读取数据时,它会失败并且MySQL停止工作。

    解?

    我在这个论坛上找不到解决方案而且我从昨天起就试图解决这个问题。

    我目前找到的唯一解决方案是一个非常天真的解决方案:运行MySQL(和其他服务)作为 peterfoo 用户,而不是相应的解决方案( mysql )。这不是一个关键问题,但引入了一个安全问题:使用特定用户进行系统服务以保持对数据访问的控制始终是可以接受的。

    有什么想法吗?

    谢谢!

    更多信息

    如果我将ls -l运行到/ data目录,我会得到:

    drwxr-xr-x    8 peterfoo  staff   272B 17 may 09:48 app1-data/
    drwxr-xr-x    3 peterfoo  staff   102B 25 may 12:38 app2-data/
    drwxr-xr-x    7 peterfoo  staff   238B 25 abr 10:35 app3-data/
    

    如果我尝试将目录的所有权更改为 mysql ,则它不起作用并保持 peterfoo

    $ sudo chown mysql:mysql /data/app1-data
    $ ls -l /data | grep app1
    drwxr-xr-x    8 peterfoo  staff   272B 17 may 09:48 app1-data/
    

    如果还尝试将rwx权限更改为777,然后使用辅助用户(让我们说用户2)可以创建目录和文件,但一旦创建,所有权将自动更改为peterfoo,并且创建的子目录将变为不可写入用户2。

    $ sudo chmod 777 /data/app1-data
    $ ls -l /data | grep app1
    drwxrwxrwx    8 peterfoo  staff   272B 17 may 09:48 app1-data/
    $ su user2
    $ touch test.txt
    $ mkdir /data/app1-data/test
    $ ls -l /data/app1-data/
    drwxrwxrwx 1 peterfoo staff 204 May 25 12:38 ./
    drwxrwxr-x 1 peterfoo staff 510 May 24 14:29 ../
    -rw-r--r-- 1 peterfoo staff   0 May 25 08:07 test.txt
    drwxr-xr-x 1 peterfoo staff  68 May 25 12:38 test/
    

1 个答案:

答案 0 :(得分:0)

嗯,让我直截了当地说: 你有一个Linux的虚拟机,你附加了部分外部存储;然后,您将该存储安装在linux系统的/ data中。

创建了一个docker容器,其容器位于容器内,位于linux vm内/ data内的容器内。

如果我说得对,Docker应该自动拥有在linux vm中写入/ data的权限,我能想到的唯一问题是在/ data目录中的docker中设置的权限。

如果我的预感是正确的,当你在码头工具内ssh-ls -l at /你会发现所有者是peterfoo并且没有其他用户的许可