【发布时间】:2016-09-22 21:16:46
【问题描述】:
首先让我描述一下我正在开发的系统。
简介
- 我有一台带有小型 SSD 驱动器的 Mac。系统包含不同的 作为独立 docker 运行的数据分析工具。
- Docker for OSX 不能直接在系统上运行,它需要一个 基于 linux 的虚拟机,在内部运行 docker。
- 其中一些工具存储大量数据(数 TB),这意味着内部 HDD 不够用,因此我们需要将数据存储在外部介质中。
因此,对于每个 docker,分离数据存储(数据库)和系统文件(操作系统 + 工具源)会很有趣。数据库必须存储在外部硬盘上。
我所做的是:
在 OSX 和基于 Linux 的 VM(docker 的主机)之间的外部 HDD 上创建一个共享目录。假设此目录安装在 Linux VM 内的 "/data" 处。
然后,在创建 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