MySQLコンテナをlimaで起動するとPermission Deniedになる
https://1.bp.blogspot.com/-O3zlPqlH81I/WhUhkXnItkI/AAAAAAABIMM/YJUMuONAFqQDCx9_e5u5sjzix3YvacNjwCLcBGAs/s300/animal_quiz_neko_batsu.png
まとめ
コンテナの ENTRYPOINT に指定されているスクリプトの仕様によるもの
起動に失敗する MySQL のコンテナの起動設定で、user に mysql を指定すると良い
docker run の場合:
docker run のオプションに --user mysql を追加する
docker run --user mysql <以下略>
docker compose の場合:
docker-compose.yml のコンテナの定義に user: mysql を書き足す
code:yaml
db:
image: mysql:8
user: mysql # これを追加する
概要
Rancher Desktop をつかって開発環境のコンテナを起動したときに気づいた
この現象は少なくとも確認した限りでは Docker では発生しなかった
おそらくコンテナを起動している Linux VM のファイル共有の扱いが Docker と Rancher のコアになっている lima の間で異なるためこういう結果となっているのではないかと考えている。
原因となる実装
Docker がメンテナンスしている MySQL イメージは、起動時にデータベースが初期化されていない場合に、初期構築用のSQLが動作するように設定されている
https://hub.docker.com/_/mysql
初期構築の処理を行っているのは ENTRYPOINT に指定されているシェルスクリプト
https://github.com/docker-library/mysql/blob/e0d43b2a29867c5b7d5c01a8fea30a086861df2b/8.0/Dockerfile.oracle#L118
このスクリプトでは実行ユーザーが root の場合に /var/lib/mysql の権限を mysql ユーザーに chown する仕組みが組み込まれている
https://github.com/docker-library/mysql/blob/e0d43b2a29867c5b7d5c01a8fea30a086861df2b/8.0/docker-entrypoint.sh#L229-L233
この処理がコケて、「chown: changing ownership of '/var/lib/mysql/': Permission denied」というようなメッセージが出て、コンテナの起動に失敗する。