在OSX中安装Docker卷时权限被拒绝

时间:2015-12-23 19:57:57

标签: mysql docker docker-compose docker-machine

我的智慧结束了,所以希望你们大家能帮助我。在带有docker-machine的OSX 10.11.2中,我有一个docker-compose文件,它应该构建一个本地Dockerfile并为它附加一个MySQL容器。 MySQL容器应该挂载我存储数据库数据的本地文件夹,因此如果容器或VM关闭,我可以重新启动它而不会丢失数据。问题是,当我运行它时,它会抛出一个权限错误:

db_1  | 2015-12-23 19:17:59 7facaa89b740  InnoDB: Operating system error number 13 in a file operation.
db_1  | InnoDB: The error means mysqld does not have the access rights to
db_1  | InnoDB: the directory.

我已经尝试过每一个我能想到的排列方式来实现这个目标。我正在阅读它,它可能与docker-machine如何处理OSX的权限有关,但是docker-machine的文档说它安装了/Users文件夹,所以这不应该是一个问题。 / p>

这是docker-compose.yml

web:
  build: .
  ports:
    - "3000:3000"
  links:
    - db
db:
  image: mysql:5.6
  ports:
    - "3306:3306"
  volumes:
    - /Users/me/Development/mysql-data:/var/lib/mysql
  environment:
    MYSQL_ROOT_PASSWORD: mypass

有什么想法吗?我不禁想到这是非常简单的事情。任何帮助都将非常感激!

修改

  • 主持人 - drwxr-xr-x 7 me staff 238 Dec 23 12:10 mysql-data/
  • VM - drwxr-xr-x 1 docker staff 238 Dec 23 20:10 mysql-data/

对于容器,它不会在安装卷的情况下运行。没有-v挂载,它是:

  • 容器 - drwxr-xr-x 4 mysql mysql 4096 Dec 24 00:37 mysql

2 个答案:

答案 0 :(得分:11)

这个问题来自Mac和Linux分别使用的用户标识。 Mac不喜欢Linux想要将1用作userID。

我在mac + docker-machine设置中解决所有权限疯狂的方法是使用这个Dockerfile

FROM mysql:5.6

RUN usermod -u 1000 mysql
RUN mkdir -p /var/run/mysqld
RUN chmod -R 777 /var/run/mysqld

而不是普通的MySQL 5.6 Image。

最后两行是必要的,因为更改mysql用户的用户ID会破坏该映像的构建权限。 =>您需要777权限才能在此处运行:/

我知道这有点hacky,但到目前为止我知道权限问题的最佳解决方案。

答案 1 :(得分:0)

尝试使用最新的docker for mac而不是docker工具。 Docker for Mac不再使用VirtualBox,而是使用HyperKit,这是一种基于OS X 10.10 Yosemite及更高版本的Hypervisor.framework构建的轻量级OS X虚拟化解决方案。

我建议也完全删除docker工具(它们可以共存):https://github.com/docker/toolbox/blob/master/osx/uninstall.sh

使用docker for mac,你不必使用权限黑客,它就像在linux版本上一样工作。