在 OSX 中安装 Docker 卷时权限被拒绝
Permission denied when mounting Docker volume in OSX
我对此束手无策,所以希望你们能帮助我。在 OSX 10.11.2 和 docker-machine 中,我有一个 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
文件夹,所以这应该不是问题。
这是 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
这个问题来自于Mac和Linux分别使用的userids。 Mac 不喜欢 Linux 想要使用 1 作为用户 ID。
我在 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 图片。
最后两行是必要的,因为更改 mysql 用户的用户 ID 会扰乱该图像的内置权限。 => 您需要 777 权限才能在此处 运行 :/
我知道这有点老套,但这是迄今为止我所知道的权限问题的最佳解决方案。
尝试为 mac 使用最新的 docker 而不是 docker 工具。 Docker for Mac 不再使用 VirtualBox,而是使用 HyperKit,一种轻量级的 OS X 虚拟化解决方案,构建在 OS in OS X 10.10 [=29] 之上=] 及以上。
我建议也完全删除 docker 工具(它们可以共存):https://github.com/docker/toolbox/blob/master/osx/uninstall.sh
使用 docker for mac,您不必使用权限黑客,它就像在 linux 构建中一样工作。
我对此束手无策,所以希望你们能帮助我。在 OSX 10.11.2 和 docker-machine 中,我有一个 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
文件夹,所以这应该不是问题。
这是 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
这个问题来自于Mac和Linux分别使用的userids。 Mac 不喜欢 Linux 想要使用 1 作为用户 ID。
我在 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 图片。
最后两行是必要的,因为更改 mysql 用户的用户 ID 会扰乱该图像的内置权限。 => 您需要 777 权限才能在此处 运行 :/
我知道这有点老套,但这是迄今为止我所知道的权限问题的最佳解决方案。
尝试为 mac 使用最新的 docker 而不是 docker 工具。 Docker for Mac 不再使用 VirtualBox,而是使用 HyperKit,一种轻量级的 OS X 虚拟化解决方案,构建在 OS in OS X 10.10 [=29] 之上=] 及以上。
我建议也完全删除 docker 工具(它们可以共存):https://github.com/docker/toolbox/blob/master/osx/uninstall.sh
使用 docker for mac,您不必使用权限黑客,它就像在 linux 构建中一样工作。