Docker:MariaDB/MySQL在windows主机上启动失败

Docker:MariaDB/MySQL在windows主机上启动失败,docker,mariadb,docker-compose,Docker,Mariadb,Docker Compose,我正在尝试使用官方的mariadb docker图像以及php fpm和nginx来运行我的Symfony 2应用程序 其想法是将所有db文件保存在一个已装入的文件夹中。在Mac操作系统上,它工作正常——在Windows机器上,每次MariaDB尝试启动时,我都会收到一个错误。奇怪的是,它实际上能够创建一些文件——我可以看到ibdata1文件,但它的大小是0字节。还有两个aria_日志文件,数据量很少,这意味着mysql实际上能够在其中写入数据 我正在使用windows 1.12.2 beta

我正在尝试使用官方的mariadb docker图像以及php fpm和nginx来运行我的Symfony 2应用程序

其想法是将所有db文件保存在一个已装入的文件夹中。在Mac操作系统上,它工作正常——在Windows机器上,每次MariaDB尝试启动时,我都会收到一个错误。奇怪的是,它实际上能够创建一些文件——我可以看到ibdata1文件,但它的大小是0字节。还有两个aria_日志文件,数据量很少,这意味着mysql实际上能够在其中写入数据

  • 我正在使用windows 1.12.2 beta版的docker。但我也试过马厩
  • 存储项目的windows磁盘是共享的(通过Docker for windows UI的“共享驱动器”部分)
  • dir是100%可写的,因为nginx甚至mysql本身都可以将它们的日志放在其中
  • 我完全不是像日志所说的那样“磁盘空间不足”
这是我的docker撰写文件:

version: '2'
services:
db:
    image: mariadb
    ports:
        - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: test
        MYSQL_USER: root
        MYSQL_PASSWORD: root
    volumes:
        - ./docker-runtime/mysql:/var/lib/mysql
php:
    build: ./docker/php-fpm
    volumes:
        - ./:/var/www/symfony
        - ./docker-runtime/logs/symfony:/var/www/symfony/app/logs
    links:
        - db
nginx:
    build: ./docker/nginx
    ports:
        - "80:80"
    links:
        - php
    volumes_from:
        - php
    volumes:
        - ./docker-runtime/logs/nginx/:/var/log/nginx
下面是当我编写docker compose时日志所说的内容:

db_1     | 2016-10-18 13:14:06 7f79eed7f7c0 InnoDB: Error: Write to file ./ibdata1 failed at offset 0.
db_1     | InnoDB: 1048576 bytes should have been written, only 0 were written.
db_1     | InnoDB: Operating system error number 22.
db_1     | InnoDB: Check that your OS and file system support files of this size.
db_1     | InnoDB: Check also that the disk is not full or a disk quota exceeded.
db_1     | InnoDB: Error number 22 means 'Invalid argument'.
db_1     | InnoDB: Some operating system error numbers are described at
db_1     | InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] InnoDB: Error in creating ./ibdata1: probably out of disk space
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data!
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] Plugin 'InnoDB' init function returned error.
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] Unknown/unsupported storage engine: InnoDB
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] Aborting

我非常感谢您对这个问题的任何意见,因为我现在正处于发飙的时刻

您可能有权限问题。要放弃,请将docker-compose.yml更改为使用命名卷:

版本:“2”
服务:
db:
图片:mariadb
端口:
- "3306:3306"
环境:
MYSQL\u ROOT\u密码:ROOT
MYSQL\u数据库:测试
MYSQL\u用户:root
MYSQL\u密码:root
卷数:
-mysql:/var/lib/mysql
php:
构建:./docker/php fpm
卷数:
-./:/var/www/symfony
-./docker runtime/logs/symfony:/var/www/symfony/app/logs
链接:
-分贝
nginx:
构建:./docker/nginx
端口:
- "80:80"
链接:
-php
卷从:
-php
卷数:
-./docker runtime/logs/nginx/:/var/log/nginx
卷数:
mysql:
试试看mysql错误是否消失了


关于

您需要在启动MariaDB时添加此选项(在Dockerfile的
CMD
或docker compose
命令中:
):

这里有记录:

如果没有帮助,还可以添加
——innodb使用本机aio=0

Windows或Mac OS X不支持异步I/O:

如果您想备份数据,请阅读此内容。尽管我推荐一个简单的
docker exec mysqldump数据库>dump.sql
。您所说的“存储项目的windows磁盘是共享的”是什么意思?我希望您没有试图让两个MySQL实例共享相同的数据文件。不确定是什么让您认为我会这样做:)我的意思是,带有我的文件的windows驱动器在docker for windows UI的“共享驱动器”部分被选中。感谢您添加另一个选项!当我在互联网上找到一个迄今为止最好的答案,并有最好的参考资料时,我会对它进行测试。谢谢
--innodb-flush-method=fsync