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

VagrantMacMySQLエラー解消
【解決方法】Macのvagrantでnfsでマウントした際にゲストOSのDockerでMySQL初期化エラー
Memo
この記事は公開されてから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.という
書き込みができませんというエラーが発生しました。

log
Initializing 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.yml
version: '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

終わりに

最後までご覧いただきありがとうございます。
この記事では【解決方法】Macのvagrantでnfsでマウントした際にゲストOSのDockerでMySQL初期化エラーについて紹介させていただきました。

これからも皆様の開発に役立つ情報を提供していきたいと考えています。
今後ともよろしくお願いいたします。