【问题标题】:Dockers: external drive as shared volume in OSX, PermissionsDockers:外部驱动器作为 OSX 中的共享卷,权限
【发布时间】:2016-09-22 21:16:46
【问题描述】:

首先让我描述一下我正在开发的系统。

简介

  • 我有一台带有小型 SSD 驱动器的 Mac。系统包含不同的 作为独立 docker 运行的数据分析工具。
  • Docker for OSX 不能直接在系统上运行,它需要一个 基于 linux 的虚拟机,在内部运行 docker。
  • 其中一些工具存储大量数据(数 TB),这意味着内部 HDD 不够用,因此我们需要将数据存储在外部介质中。

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

我所做的是:

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

  2. 然后,在创建 docker 时,使用主机中的“/data”目录作为挂载在 docker 的“/data”目录中的卷。如果我 ssh 到创建的 docker 之一并列出“/data”目录的内容,我可以看到外部 HDD 的内容。这样就行了。

这是问题出现的时间,与PERMISSIONS有关。

问题

考虑到:

  • 在 OSX 中,我们的用户是 peterfoo

  • 在 docker 上,主要用户也是 peterfoo,但我们可能有不同系统服务的次要用户。比如我们安装MYSQL,MySQL服务默认由用户mysql执行,所有文件都属于这个用户。

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

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

解决方案?

我在这个论坛上找不到解决方案,从昨天开始我一直在尝试解决这个问题。

我目前发现的唯一解决方案是一个非常幼稚的解决方案:以 peterfoo 用户身份运行 MySQL(和其他服务),而不是对应的用户 (mysql em>)。这不是一个关键问题,但会带来一个安全问题:始终建议使用特定用户的系统服务来控制对数据的访问。

有什么想法吗?

谢谢!!

更多信息

如果我将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,然后使用辅助用户(假设 user2)可以创建目录和文件,但一旦创建,所有权将自动更改为 peterfoo,并且创建的子目录对 user2 变得不可写。

$ 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/

【问题讨论】:

    标签: macos docker permissions


    【解决方案1】:

    嗯,让我直截了当地说: 你有一个用于 linux 的虚拟机,你连接了部分外部存储;然后你在 linux 系统的 /data 上挂载了那个存储。

    创建了一个 docker 容器,其卷位于容器内的 /data 处,安装在 linux vm 内的 /data 处。

    如果我做对了,docker 应该自动拥有在 linux vm 上写入 /data 的权限,我能想到的唯一问题是在 /data 目录下的 docker 内设置的权限。

    如果我的预感是正确的,当你在 docker 中 ssh 和 ls -l at / 时,你会发现所有者是 peterfoo 并且没有其他用户的权限

    【讨论】:

    • 是的,但是如果我使用默认的 mysql 用户运行 MySQL 服务,那么当服务尝试写入 /data 目录时,它会失败,因为只有 /data 目录允许写入 peterfoo。请查看我在上面添加的更多信息部分。
    • 检查分区类型 df -T 如果它的 NTFS 或 FAT 它们不支持权限。检查此答案以获取详细信息和安装选项superuser.com/questions/57092/…
    • 谢谢!它与分区类型有关。 HDD 是 HFS+ 格式 (OSX),但是当我将它安装在 VM 上时,我使用了 vboxsf 格式(虚拟盒文件共享格式)。使用这种格式,我无法更改 R/W 权限。现在我使用 NFS 在 OSX 和 VM 之间挂载共享文件夹,我忽略了这个问题。参考:yas.ch/blog/2015/04/10/file-sharing-in-dockergist.github.com/pointcom/b72ecd2709aba789e881
    猜你喜欢
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    相关资源
    最近更新 更多