T-CREATOR

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

【解決方法】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

もっと見る