はじめに
limaを使って立ち上げたVMにdockerのmysqlを立ち上げようとした際に、以下のエラーでハマったので備忘録として残します。
- read-only file system
- permission denied
- exec format error
[ERROR] [MY-010259] [Server] Another process with pid 63 is using unix socket file
環境
名前 | バージョン |
---|
PC | MacBook Pro (13-inch, M1, 2020) |
lima | 0.14.2 |
Docker | 20.10.12 |
結論
limaのdocker exampleから大きく変更していません。
変更しているのは、mountsの部分です。
lima.yaml
調査
はじめにlimaのGitHubからテンプレートを取ってきます
このときのファイルは以下の通りです
lima.yaml
read-only file system
Linuxインスタンスを立ち上げます
出力結果
ちゃんと起動していますね。
完了したらdocker cliの向け先を先ほど作成したインスタンスに向けます
このときのcomposeファイルは以下の通りです。
docker compose upしてみると・・
mkdir /path/to/mysql/data: read-only file system
で拒否されました。
解決-1
- location: "~"
は消して、特定のディレクトリのみwritable: true
にします。
Attempting to mount a writable directory under a read-only directory doesn’t work #873 - GitHub issues
補足
ホームディレクトリへの書き込み権限はdefaultでfalseなので、lima.yamlのmountsにwritable: true
を入れれば解消します。
Filesystem is not writable - GitHub lima README
しかし、公式ではtrueにすべきではない
と書いているので、ホームディレクトリに対してwritable
の設定するのは避けたほうが良いでしょう。
lima/examples/default.yaml
私のPCでは、ホームディレクトリ配下にProject
ディレクトリを作成しているので、以下のように追記し、インスタンスを作り直しました。
しかし、結局エラーは変わらず、read-only file system
でした。
limaのissueを探してみると、どうやらホームディレクトリはwritable:false
で、その配下のディレクトリをwritable:true
にするようなことはできないそうです。
Overlapping mounts don’t work correctly #302 - GitHub issues
permission denied
lima.yamlのmountsを修正してもう一度インスタンスを作成します。
compose.yamlはそのままです。
今度はpermission denied
で止まりました。
解決-2
MySQLコンテナをlimaで起動するとPermission Deniedになる - Scrapboxの記事を参考にしました。
以下のようにuser: mysql
を入れます。
user:mysql
を入れて実行してみると、今度は、exec format error
が出ました。
解決-3
mysql/mysql-server
はarm64をサポートしているようなので、dockerイメージを代えます。
MySQL Server 8.0, the latest GA, for both x86 and AArch64(ARM64) architectures (tag: 8.0, latest) (mysql-server/8.0/Dockerfile)
mysql/mysql-server - DockerHub
[ERROR] [MY-010259] [Server] Another process with pid 63 is using unix socket file.
今度はunix socket fileでエラーが出ました。
解決-4
[Error] [Server] Do you already have another mysqld server running on socket ? でMySQLがDockerで立ち上がらない現象 - Qiitaの記事を参考にしました!
名前付きボリュームをつけることで回避ができるそうです。
やってみましょう。
無事mysqlに繋げることができました