10月14日に Docker 1.3 がリリースされました。このリリースで__指定したコンテナの中でプロセスを実行する__ための docker exec コマンドが新たに追加されたので、もはや nsinit や nsenter を使う必要はなくなりました。
例えば influxdb という名前のコンテナに入るには次のようにします。
docker exec -it influxdb bash
shell が不要なら直接コマンドを実行することもできます。
docker exec -it influxdb ps -ef
この方法を使えば、コンテナ内のファイルをリダイレクトして親ホストに保存したり、パイプで処理をつなげたりすることもできます。docker cp コマンドと比べると、プロセスの実行結果を取得できるという点で柔軟な処理ができそうです。
nsenter は jpetazzo/nsenter コンテナを使えば簡単にインストールできましたが、docker が標準対応してくれたことで事前準備が不要になり、さらに楽になりました。
追記
nsenter と違って環境変数が正しく設定された状態でコマンドが実行されるようです。以下のような方法で指定した環境変数を参照することができます。素晴らしい!
- Dockerfile に
ENV
で書いた環境変数 - docker run の --link オプションにより設定される環境変数
- docker run の -e オプションにより設定される環境変数
docker exec -it influxdb env