0%

nsenterコマンドをDockerコンテナからホストにマウントして使う

Docker Online Meetup #3でメモした使い方です。
これまでコンテナのデバッグ用にphusion/baseimageを使いsshdをインストールしていました。

nsenterコマンドを使うとsshdをインストールしなくても起動したコンテナにattachすることができます。
本当にsshdが必要なケースもあると思いますが、disposableな使い方を推進したいのでなるべくsshdは使わないようにしていきます。

nsenterコマンドのインストールは、jpetazzo/nsenterのDockerコンテナからvolumeオプションを使い、コマンドをホストにマウントすることができます。

jpetazzo/nsenter

jpetazzo/nsenterのDockerコンテナからnsenterコマンドをインストールします。

--rmオプションを使い、jpetazzo/nsenterを起動します。
-vオプションを使い、コンテナの/targetをDockerホストの/usr/local/binにマウントすることで、
nsenterコマンドをインストールします。

$ sudo mkdir /usr/local/bin
$ docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
Installing nsenter to /target
Installing docker-enter to /target

~/bin/nse

nsenterコマンドを便利に使う~/bin/nseコマンドを作成します。

~/bin/nse
#!/usr/bin/env bash
[ -n "$1" ] && sudo nsenter --pid --uts --mount --ipc --net --target $(docker inspect --format="{{ .State.Pid }}" $1)

chmodで実行権限をつけます。

$ chmod u+x ~/bin/nse

CONTAINER_IDを引数に指定して、コンテナにアタッチします。

$ nse CONTAINER_ID

使い方

アタッチするコンテナは起動している必要があります。

$ docker start b008d160f798
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b008d160f798 masato/nginx-minimal:latest nginx -g 'daemon off 20 hours ago Up 3 minutes 0.0.0.0:80->80/tcp thirsty_poincare

~/bin/nseコマンドを使いコンテナにアタッチします。

$ nse b008
root@b008d160f798:/#