Сам по себе запуск не представляет трудностей, однако настройка контейнера с базой данных предполагает сохранение данных между запусками.
Запуск файла конфигурации (docker-compose.yaml):
version: "3" services: mysql: image: bitnami/mariadb:10.7 volumes: - /SharedFolder/ProjectFolder/FolderForDatabaseData:/bitnami/mariadb environment: - ALLOW_EMPTY_PASSWORD=yes - MARIADB_ROOT_PASSWORD=${DB_PASSWORD} - MARIADB_DATABASE=${DB_NAME}
С переменными окружения задаваемыми в файле .env:
DB_PASSWORD=your_root_database_password DB_NAME=your_database
Приводит к остановки контейнера. Просмотр логов сообщает об ошибке (говорящей о том, что используемая файловая система не поддерживает aio):
[36mmysql_1 |[0m 2022-04-18 17:29:12 0 [ERROR] InnoDB: Operating system error number 22 in a file operation. [36mmysql_1 |[0m 2022-04-18 17:29:12 0 [ERROR] InnoDB: Error number 22 means 'Invalid argument' [36mmysql_1 |[0m 2022-04-18 17:29:12 0 [ERROR] InnoDB: File ./ibdata1: 'aio write' returned OS error 222. Cannot continue operation [36mmysql_1 |[0m 220418 17:29:12 [ERROR] mysqld got signal 6 ;
Найденное решение в сети, связанное с заданием конфигурации БД (в файле conf.d):
[mysql] innodb_flush_method=O_DSYNC innodb_use_native_aio=0
Не устраняет возникающую ошибку.
Попытки задания конфигурации в docker-compose.yaml так же не привели к положительному результату.
Возможное решение
Если не используются «специфические» возможности MarianDB можно вместо нее использовать образ MySQL:
version: "3" services: mysql: image: mysql:5.7.25 volumes: - /SharedFolder/ProjectFolder/FolderForDatabaseData:/var/lib/mysql command: "--innodb_use_native_aio=0" environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_DATABASE: ${DB_NAME}
Важно обязательно использовать команду, которая устраняет ошибку связанную с aio:
command: "--innodb_use_native_aio=0"
В случае необходимости проверки работоспособности кода на MarianDB необходимо:
- использовать сборку без указания volumes для данных (это приведет к созданию пустой БД)
- импортировать структуру, тестовые данные в БД (подготовленные из структуры/данных используемой MarianDB в проекте, а не MySQL, используемые при разработке)
- проверить работоспособность приложения