【解決方法】Macのvagrantでnfsでマウントした際にゲストOSのDockerでMySQL初期化エラー

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Macのvagrantでnfsでマウントした際にゲストOSで起動しているDockerで
MySQLのイメージを利用する際に初期化エラーが発生したため
解決のための手順をメモしました。
環境
- Vagrant 2.0.3
- CentOS 7.4
- Docker 18.03
- MySQL 5.7
発生したエラー
初期化時のエラー
specified but the data directory exists and is not writable.
という
書き込みができませんというエラーが発生しました。
logInitializing database
mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
2018-05-21T14:40:41.055344Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.
2018-05-21T14:40:41.055433Z 0 [ERROR] Aborting
原因
共有ディレクトリのアクセス権限がないため
ゲストOS側でホストOSとの共有ディレクトリに対してのアクセス権限がないことで ファイルの書き込みができなかったためです。
具体的な場所は/var/lib/mysql
docker-composeのvolumes
で設定している/var/lib/mysql
のディレクトリ
docker-compose.ymlversion: '3'
services:
db:
image: mysql
command: mysqld
user: mysql
ports:
- 3307:3306
volumes:
- ./db/data:/var/lib/mysql
解決方法
Vagrantfileの修正
Vagrantfileに以下のように設定します。
Vagrantfile ## NFS Share
config.vm.synced_folder ".", "/vagrant-nfs", type: "nfs"
config.nfs.map_uid = 501
config.nfs.map_gid = 20
vagrantを再起動
Vagrantをリロードします。
terminal$ vagrant reload
権限の確認
設定が正しく変更されているか/etc/exports
を確認します。
terminal$ sudo vi /etc/exports
uidとgidを確認
uidとgidが正しく設定されているか確認します。
/etc/exports "/Users/xxxx/vagrant" 192.168.33.XX -alldirs -mapall=501:20
記事Article
もっと見る- article
NestJSでバリデーションエラーをログ出力する設定を紹介
- article
NestJSで作成したAPIのレスポンスヘッダーに付与されるx-powered-by: Express を消す方法を紹介
- article
Next.jsで環境変数に別の変数を利用し柔軟に管理するdotenv-expandの活用法を紹介
- article
【2025年3月版】Cursor ProとAPI利用比較。 Claude・GPT-4o・o1・GPT-4.5の損益分岐点と選び方
- article
フォーム入力情報からZodを利用してDTO作成しへ変換処理を実施するやり方を紹介
- article
Zodバリデーションのエラーメッセージを日本語化すやり方を紹介