仮想マシン上のCoreOSで、dockerの永続化データをホストとの共有フォルダに作成できず、権限エラーとなってしまう

投稿者: Anonymous

色々検索してみたものの、同種の問題が見つけられなかったので質問いたします。

vagrantで構築したCoreOSにホストとの共有フォルダを設定し、公式のmysqlコンテナを実行させようとしているのですが、どうしても上手く構築ができません。

ホストにある mysql ディレクトリを /home/core/share/ 以下にマウントした状態で次のコマンドを実行すると、

$ docker -run -v /home/core/share/mysql:/var/lib/mysql mysql

起動途中でパーミッションが変更できないというエラーが表示されていまいます。

FATAL ERROR: Could not chown directory /var/lib/mysql/

-v オプションの指定先を、共有フォルダ以外のパスに指定した場合は問題なく最後まで起動しました。CoreOS内でアクセス権限の変更も試してみましたが、解決しません。

# やったけど解決せず
$ chown core:core /home/core/share/mysql

もしかして、共有フォルダに直接永続化データを作成するような使い方はできないような仕組みになっているのでしょうか…?

解決

自己解決したので報告します。

CoreOSのVagrantfileに書いてあるファイル共有設定では、プロトコルとしてNFSが使用されます。(この場合はMacOSXのnfsdを使用)

NFSを使ったファイル共有では、クライアント側からはchownできません。
そのため、どうしてもchownが必要な場合、次の2つのアプローチのいずれかをとる必要があるようです。

  • NFSサーバ側で、dockerコンテナ側のUID/GIDに合わせてあらかじめオーナーを変更しておく
  • dockerコンテナ側のUID/GIDを、NFSサーバ側のオーナーに合わせて構成しておく

既存のdockerコンテナの構成をいじるのは面倒なので、前者のアプローチを採用しました。

公式のmysqlコンテナの場合、普通に起動すると/var/lib/mysql以下のオーナーは 999:999 になっている為、MacOSXのターミナル上で共有したいフォルダへあらかじめ$chown -R 999:999 targetをしておきます。この状態でmysqlコンテナを立ち上げたところ、問題なく初期化処理を通過することができました。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *