Поддавшись современным тенденциям я решил попробовать перенести один из своих проектов в docker. В интернете пишут, что это очень просто, работает стабильно, но оказалось что это не совсем так.
Первое, что я захотел сделать — это поднять nginx + php-fpm + mariaBD в трёх разных контейнерах. С nginx и php-fpm вообще никаких проблем не было, а вот mariaBD(mysql) никак не поднималась.
В логах постоянно появлялись ошибки:
$ winpty docker run —volumes-from docker-mariadb-data -e MYSQL_ROOT_PASSWORD=user -p 3306:3306 -d mariadb
$ docker logs 34f8e5e53db5
2016-01-28 7:46:26 140139439015872 [Note] mysqld (mysqld 10.1.10-MariaDB-1~jessie) starting as process 1 …
2016-01-28 7:46:26 140139439015872 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: The InnoDB memory heap is disabled
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Memory barrier is not used
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Using Linux native AIO
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Using SSE crc32 instructions
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Completed initialization of buffer pool
2016-01-28 7:46:26 140139439015872 [Warning] InnoDB: Failed to set O_DIRECT on file ./ibdata1: OPEN: Invalid argument, continuing anyway. O_DIRECT is known to result in ‘Invalid argument’ on Linux on tmpfs, see MySQL Bug#26662.
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Highest supported file format is Barracuda.
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: 128 rollback segment(s) are active.
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Waiting for purge to start
2016-01-28 7:46:26 140139439015872 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.26-76.0 started; log sequence number 1600739
2016-01-28 7:46:26 140138654959360 [Note] InnoDB: Dumping buffer pool(s) not yet started
2016-01-28 7:46:26 140139439015872 [Note] Plugin ‘FEEDBACK’ is disabled.
2016-01-28 7:46:26 140139439015872 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
2016-01-28 7:46:26 140139439015872 [Note] Recovering after a crash using tc.log
2016-01-28 7:46:26 140139439015872 [ERROR] Can’t init tc log
2016-01-28 7:46:26 140139439015872 [ERROR] Aborting
Спустя час проб и ошибок я разобрался что к чему.
Проблема проявляется только на windows.
Решение:
При создании контейнера указываем
volumes: - ./config:/etc/mysql/conf.d - ./data:/var/lib/mysql
И создаем файл local.cnf в папке ./config
[mysqld] innodb_flush_method=O_DSYNC