Dockerを最新バージョンにアップデートしたら、永続化したMySQLデータベースを読み込めなくなり、本番環境に持ち込もうと思っていたMovable Typeの環境にアクセスできなくなりました。アクセスできないので、当然ダンプも取れません。
なんとか解決したので、取り急ぎ記事にします。
Dockerの環境設定を変更する
私が解決した方法から記載します。
環境設定の「General」にある「Choose file sharing implementation for your containers」へ移動し、「VirtioFS」が選択されていたのを「gRPC FUSE」に変更したところ直りました。
現象
私はMacOS版のDockerを利用しており、docker-composeで、データベースの永続化をしていました。つまり、プロジェクト内のdb-data
ディレクトリ内にデータベースを保存して、Dockerを終了してもデータが消えないようにしていました。
services:
mysql:
・・・
volumes:
- ./db-data:/var/lib/mysql
これが、Docker Desktopを 4.25.0 (126437) にアップデートしたところ、MySQLが起動しない状態となりました。
コンテナ内を詳しく見てみると、何度も起動と停止を繰り返しており、以下のようなエラーを出していました。
chown: changing ownership of '/var/lib/mysql/mysql.sock
既知の不具合らしい
エラーでひたすら検索したところ、以下のissueにたどり着きました。
どうもmysqlコンテナの立ち上げの際に chown コマンドが入るようになり、それがMacOSではエラーとなってしまうようでした。
さらにこのissueには、「私はここのURLのトップコメントで解決しました!」というコメントがありました。
解決
トップコメントは以下のように書かれています。
With the latest docker you can disable the gRPC Fuse for file sharing. (the gRPC Fuse setting is causing this problem, it's incompatible with the data dictionary of 0)
最新の Docker を使用すると、ファイル共有の gRPC Fuse を無効にすることができます。(gRPC Fuse 設定がこの問題の原因です。0 のデータ ディクショナリと互換性がありません)
Docker Desktopでは複数のファイルシステムを選択できるようで、私の環境では「VirtioFS」が選択されていました。もしかすると、今回のバージョンから初期状態がVirtioFSになって、gRPC FUSEから強制変更されたことにより、不具合が出たのかもしれません。
気が狂うかと思ったので、これからはこまめにバックアップを取ろうと思いました…