座敷牢日誌

都落ちした元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 を指定する方法もある.

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

特定のパッケージに依存するパッケージを探す方法 (archlinux)

pacman - ArchWiki

あるパッケージを必要としているパッケージが何かを調べるには, whoneeds コマンド, または pactree コマンドを使う.

whoneeds だとインストール済みパッケージが検索対象になる.

インストールされていないパッケージについて調べるなら, pactree の結果を使うしかないのかな.

mplayer に依存するパッケージを pactree で探す.

$ pactree -ars mplayer
mplayer
|-acetoneiso2
|-gnome-mplayer
| `-gecko-mediaplayer
|-nuvexport
|-ogmrip
`-openshot
$

適当にフィルタしてやる.

$ pactree -ars mplayer | tail -n +2 | grep -o "\<[a-z]\S\+$" | sort -u
acetoneiso2
gecko-mediaplayer
gnome-mplayer
nuvexport
ogmrip
openshot
$