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

Docker: MariaDB / MySQL startup fails on windows host

我正在尝试将官方 mariadb docker 图像与 php-fpm 和 nginx 一起用于 运行 我的 Symfony 2 应用程序。

想法是将所有数据库文件保存在已安装的文件夹中。在 Mac OS 上它工作得很好 - 在 Windows 机器上,每次 MariaDB 尝试启动时我都会收到错误消息。奇怪的是它实际上能够创建一些文件——我可以看到 ibdata1 文件,但它的大小是 0 字节。还有两个 aria_log 文件,只有几 KB 的数据,这意味着 mysql 实际上可以在那里写入。

这是我的 docker-compose 文件:

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 up:

时日志显示的内容
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 以使用命名卷:

version: '2'
services:
db:
    image: mariadb
    ports:
        - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: test
        MYSQL_USER: root
        MYSQL_PASSWORD: root
    volumes:
        - 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
volumes:
  mysql:

尝试查看 mysql 错误是否消失。

此致

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

--innodb-flush-method=fsync

记录在此处:https://github.com/docker-library/mariadb/issues/95

如果没有帮助,还添加--innodb-use-native-aio=0
Windows 和 Mac OS X:
都不支持异步 I/O https://dev.mysql.com/doc/refman/8.0/en/innodb-linux-native-aio.html