座敷牢日誌

都落ちした元SEがソフトウェアやネット関連のことを書いています

Docker Machine (VirtualBox) on Linux でボリューム共有する

Linux上で Docker Machine (VirtualBox, boot2docker) を使っていると, Dockerのボリューム機能が使いづらい.

カレントディレクトリのファイル/ディレクトリに, Ubuntuのコンテナでなにか作業したいとき, MacOSなら docker run -it --rm -v$PWD:$PWD -w$PWD ubuntu:latest bash で, カレントディレクトリをUbuntuのコンテナに共有できるのだが, Linux だとこれがうまくいかない.

dockerコマンドを実行したカレントディレクトリのファイル/ディレクトリにアクセスできないのだ. ls コマンドを実行しても, dockerコマンドを実行したカレントディレクトリのファイルなどがない.

これがなぜかというと, Docker Machine にsshでログインするとわかるのだが, Docker Machine の /hosthome というディレクトリに, Docker Machine を実行しているマシンの /home が割り当てられている. MacOSの場合のホームディレクトリは /Users/username で, Docker Machine上にも同じパスで割り当てられているから, この問題は起きない.

したがって, 回避策としては, という感じでコンテナを起動することで, いちおう期待したとおりのことはできるようになる.

docker run -it --rm -v${PWD/home/hosthome}:$PWD -w$PWD ubuntu:latest bash

ただ, これだと Docker Compose でボリューム共有するとき, ホスト側のボリュームのパスをフルパスに近い形で記述せざるをえなくなり, Linux以外のOSでとても使いづらくなってしまう.

もうひとつの回避策として, Docker Machine を作成するときに, 共有フォルダを変える, という回避策もある.

VIRTUALBOX_SHARE_FOLDER="$HOME:$HOME" docker-machine create --driver virtualbox sandbox

環境変数 VIRTUALBOX_SHARE_FOLDER で共有するディレクトリを指定することで, MacOSなどと同じような感覚でボリューム共有できるようになる. 相当するオプションとして, --virtualbox-share-folder を指定する方法もある.

この指定で, なにか支障があるのかがわかってないのが気になっている.