Qbilinux 日記

Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

Windows docker の busybox って mariadb 経由で windows file system 上にファイル保存できないのか?

久しぶりに訳あって Windows の docker 触ってる.

Linux 環境で普段使ってる docker-compose ファイル一式を持ってきて動かしてみたら動作しない.

ごく普通の mariadb + apache + busybox って形のもの.

busybox 内で

volumes:
- ./data:/var/lib/mysql

ってやって mariadb のデータを busybox 経由で windows file system 上にローカルに保存してるんだけどこれが駄目みたい.

docker を起動すると

mysql | MySQL init process in progress...
mysql | 190418 1:00:25 [Note] mysqld (mysqld 5.5.63-MariaDB-1~trusty) starting as process 90 ...
mysql | 190418 1:00:25 InnoDB: The InnoDB memory heap is disabled
mysql | 190418 1:00:25 InnoDB: Mutexes and rw_locks use GCC atomic builtins
mysql | 190418 1:00:25 InnoDB: Compressed tables use zlib 1.2.8
mysql | 190418 1:00:25 InnoDB: Using Linux native AIO
mysql | 190418 1:00:25 InnoDB: Initializing buffer pool, size = 256.0M
mysql | 190418 1:00:25 InnoDB: Completed initialization of buffer pool
mysql | InnoDB: The first specified data file ./ibdata1 did not exist:
mysql | InnoDB: a new database to be created!
mysql | 190418 1:00:25 InnoDB: Setting file ./ibdata1 size to 10 MB
mysql | InnoDB: Database physically writes the file full: wait...
mysql | 190418 1:00:25 InnoDB: Error: Write to file ./ibdata1 failed at offset 0 0.
mysql | InnoDB: 1048576 bytes should have been written, only 0 were written.
mysql | InnoDB: Operating system error number 22.
mysql | InnoDB: Check that your OS and file system support files of this size.
mysql | InnoDB: Check also that the disk is not full or a disk quota exceeded.
mysql | InnoDB: Error number 22 means 'Invalid argument'.
mysql | InnoDB: Some operating system error numbers are described at
mysql | InnoDB: http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html
mysql | InnoDB: Error in creating ./ibdata1: probably out of disk space
mysql | 190418 1:00:25 InnoDB: Could not open or create data files.
mysql | 190418 1:00:25 InnoDB: If you tried to add new data files, and it failed here,
mysql | 190418 1:00:25 InnoDB: you should now edit innodb_data_file_path in my.cnf back
mysql | 190418 1:00:25 InnoDB: to what it was, and remove the new ibdata files InnoDB created
mysql | 190418 1:00:25 InnoDB: in this failed attempt. InnoDB only wrote those files full of
mysql | 190418 1:00:25 InnoDB: zeros, but did not yet use them in any way. But be careful: do not
mysql | 190418 1:00:25 InnoDB: remove old data files which contain your precious data!
mysql | 190418 1:00:25 [ERROR] Plugin 'InnoDB' init function returned error.
mysql | 190418 1:00:25 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
mysql | 190418 1:00:25 [Note] Plugin 'FEEDBACK' is disabled.
mysql | 190418 1:00:25 [ERROR] Unknown/unsupported storage engine: InnoDB
mysql | 190418 1:00:25 [ERROR] Aborting
mysql |
mysql | 190418 1:00:25 [Note] mysqld: Shutdown complete
mysql |

な感じで abort してしまう.

実際 windows 上のファイルを見てみると ibdata1 がサイズ 0 になってる.

windows file system に保存するのをやめて

volumes:
- /var/lib/mysql

だけにすればオッケー.

うーむ.何でだろう.windows だと linuxパーミッションが維持できないとかって理由なのかな?

それとも単に mariadb のファイル書き込みと windows file system へのファイル書き込みのタイミングが違っててうまくいかないとか?

ちょっと検索してみたけど,原因らしい記述は見つからなかったな.

同様のトラブルらしい記述も見当たらない感じだなぁ.

うーむ.

私自身,docker スペシャリストって訳ではないからちょっとお手上げぎみ.

まぁ,windows ローカルに保存しないようにすればとりあえず動作してるから,ひとまずオッケーとするかなって感じ.