数据库无法启动 – 主机目录作为数据卷

我正在努力正确使用docker-compose(对于本地开发环境),当我将数据卷包含到主机目录mariadb(和mysql)失败时。 如何使用docker-compose和正确的权限使用主文件夹。 我看到其他几个数据量问题,但在这种情况下,主机文件夹被挂载,mariadb无法使用它。

在我的docker-compose.yml中我有:

expressionengine: image: mariadb expose: - "3306" volumes: # /var/lib/mysql is the datadir from my.cnf - ../containers/expressionengine/var-lib-mysql/:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=expressionengine 

但有些事情是closures的:

 Attaching to builddev_expressionengine_1 expressionengine_1 | Running mysql_install_db ... expressionengine_1 | Installing MariaDB/MySQL system tables in '/var/lib/mysql/' ... expressionengine_1 | 150603 5:15:20 [Note] /usr/sbin/mysqld (mysqld 10.0.19-MariaDB-1~wheezy-log) starting as process 38 ... expressionengine_1 | 150603 5:15:20 [Note] InnoDB: Using mutexes to ref count buffer pool pages expressionengine_1 | 150603 5:15:20 [Note] InnoDB: The InnoDB memory heap is disabled expressionengine_1 | 150603 5:15:20 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins expressionengine_1 | 150603 5:15:20 [Note] InnoDB: Memory barrier is not used expressionengine_1 | 150603 5:15:20 [Note] InnoDB: Compressed tables use zlib 1.2.7 expressionengine_1 | 150603 5:15:20 [Note] InnoDB: Using Linux native AIO expressionengine_1 | 150603 5:15:20 [Note] InnoDB: Not using CPU crc32 instructions expressionengine_1 | 150603 5:15:20 [Note] InnoDB: Initializing buffer pool, size = 256.0M expressionengine_1 | 150603 5:15:20 [Note] InnoDB: Completed initialization of buffer pool expressionengine_1 | 2015-06-03 05:15:20 7f2425ed9760 InnoDB: Operating system error number 13 in a file operation. expressionengine_1 | InnoDB: The error means mysqld does not have the access rights to expressionengine_1 | InnoDB: the directory. 

林不知道它的权限,因为mysql目录是写在主持人。 我也在与kitematic的Mac:

 bash-3.2$ cd containers/expressionengine/var-lib-mysql/ bash-3.2$ ls -la total 0 drwxr-xr-x 3 tom staff 102 Jun 3 10:16 . drwxr-xr-x 3 tom staff 102 Jun 3 10:16 .. drwxr-xr-x 2 tom staff 68 Jun 3 10:16 mysql 

权限是错误的。

要解决这个问题,只需运行如下所示:

 docker -v $(pwd)/containers/expressionengine/var-lib-mysql/:/var/lib/mysql mariadb chown -R mysql /var/lib/mysql 

假设mysql是正确的用户,你目前在containers文件夹下的目录。

将来,您可能会发现使用数据容器更容易。

该问题仅在OSX上存在,并与boot2docker如何使用vboxsf有关。 vboxsf装有一个UID,但数据库服务需要另一个UID。 相关主题: https : //github.com/kitematic/kitematic/issues/593