一尘不染

在OSX中挂载Docker卷时权限被拒绝

docker

我为此付出了一切,所以希望你们能帮助我。在带有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文件夹,所以这不应该成为问题。

这是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/
  • 虚拟机- 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

阅读 409

收藏
2020-06-17

共1个答案

一尘不染

来自此的问题分别是Mac和Linux使用的用户ID。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用户的用户标识将使该映像的构建权限混乱。=>您需要777权限才能使其在这里运行:/

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

2020-06-17