OS X上的mariadb docker容器:无法创build数据库目录

我在OSX上遇到了mariadb问题,我在CentOS上也做过同样的工作。 所以它必须是OSX问题:

mariadb: image: mariadb:latest container_name: mariadb ports: - "3306:3306" restart: always environment: MYSQL_ROOT_PASSWORD: XXXXXXXX volumes: - /Users/sandro/Code/mysql:/var/lib/mysql 

日志包含以下错误:

 mkdir: cannot create directory '/var/lib/mysql//mysql': Permission denied Fatal error Can't create database directory '/var/lib/mysql//mysql' 

如果我让它像这样安装在容器内:

 volumes: - /var/lib/mysql 

它的工作原理,但我有持续性的问题,一旦虚拟机重新启动dbs不见了。

我试图创buildMySQL目录,并赋予它世界可写权限,而不是收到以下错误:

 2016-05-20 23:43:54 140694234605504 [Note] mysqld (mysqld 10.1.14-MariaDB-1~jessie) starting as process 1 ... 2016-05-20 23:43:54 140694234605504 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Using mutexes to ref count buffer pool pages 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: The InnoDB memory heap is disabled 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Memory barrier is not used 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Compressed tables use zlib 1.2.8 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Using Linux native AIO 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Using SSE crc32 instructions 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Initializing buffer pool, size = 256.0M 2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Completed initialization of buffer pool 2016-05-20 23:43:54 140694234605504 [ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode 2016-05-20 23:43:54 140694234605504 [ERROR] InnoDB: The system tablespace must be writable! 2016-05-20 23:43:54 140694234605504 [ERROR] Plugin 'InnoDB' init function returned error. 2016-05-20 23:43:54 140694234605504 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2016-05-20 23:43:54 140694234605504 [ERROR] mysqld: File '/var/lib/mysql/aria_log_control' not found (Errcode: 13 "Permission denied") 2016-05-20 23:43:54 140694234605504 [ERROR] mysqld: Got error 'Can't open file' when trying to use aria control file '/var/lib/mysql/aria_log_control' 2016-05-20 23:43:54 140694234605504 [ERROR] Plugin 'Aria' init function returned error. 2016-05-20 23:43:54 140694234605504 [ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed. 2016-05-20 23:43:54 140694234605504 [Note] Plugin 'FEEDBACK' is disabled. 2016-05-20 23:43:54 140694234605504 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded 2016-05-20 23:43:54 140694234605504 [ERROR] Unknown/unsupported storage engine: InnoDB 2016-05-20 23:43:54 140694234605504 [ERROR] Aborting 

使MySQL容器以用户1000运行。

在Dockerfile中:

 USER "1000" 

在docker-compose.yml中

 db: image: mysql user: "1000" 

这是我目前的解决方法工作(通过docker-compose.yml)。 1000用户是 – 我相信 – 泊坞窗卷中的文件的默认用户(至less对于docker机),所以这应该让你写入卷。

这很可能是许可问题。 在Mac上,docker运行在通过虚拟机映射本地目录的虚拟框中。 获得权限很困难。 首先尝试在你的/ Users / sandro / Code目录下设置最less限制的权限。 另外,尝试预先创build/ Users / sandro / Code / myssql目录,并在启动容器之前为其指定世界可写权限。

更新 :所以这个问题其实更加复杂。 看起来您不能执行许多底层文件调用,除非容器内的用户ID与启动泊坞机的用户的ID匹配。 以下是一些说明此问题的链接:

https://www.bountysource.com/issues/5393565-1-3-0-only-root-can-write-to-osx-volumes-can-t-change-permissions-within

https://github.com/boot2docker/boot2docker/issues/581

问题出在boot2docker,MariaDB镜像启动脚本,docker-compose和Virtual Box客户机操作系统之间

通过这样做,我能够运行maria db容器

 mkdir mysql chmod ug+ws mysql docker run -it -u $UID:$UID -e MYSQL_ROOT_PASSWORD=bob \ -v /Users/vlad/Proj/Stack/maria/mysql:/var/lib/mysql \ mariadb:latest 

请注意,-u选项

错误消息中的path看起来很奇怪: mkdir: cannot create directory '/var/lib/mysql//mysql': Permission denied

对我来说,它看起来像mariadb图像附加/卷path上的MySQL。 通过在docker-compose.yml文件中删除/mysql ,它就像一个魅力。

 mdb: image: mariadb environment: MYSQL_ROOT_PASSWORD: password volumes: - ./data:/var/lib