CentOS 6.5でnsenterを使ってDockerコンテナに入る方法
|CentOS 7が出ちゃったけど、もろもろのインフラが全部6ベースだからどうしようもないのさ…という昨今。Docker使うのももちろんまだまだCentOS 6.5上です。 で、動いているDockerコンテナにつなげる方法として、一時期話題になっていた、
の件。やってみたら動かないよ…。
go
での nsinit
のコンパイル方法を間違ったのかと思ったらさにあらず。カーネル2.6ベースのCentOS 6.5では、 nsinit
は動かないんだそうな。う、動かしてる環境を書いておいてください…。
じゃあどうするかというと、新しい util-linux
に入っている nsenter
を使えとのこと。依存する gettext
も拾ってきてコンパイルすれば CentOS 6.5 でも動いているコンテナにアタッチするコマンドがちゃんと 手に入る。すばらしい。これでわが軍はあと十年は戦える。
手コンパイルだとこんな感じ。rpm作るべきなのかも。
# mkdir -p /opt/lib
# mkdir /tmp/make/nsenter && cd /tmp/make/nsenter
# wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.1.tar.xz
# tar xvf gettext-0.19.1.tar.xz
# cd gettext-0.19.1
# ./configure --prefix=/opt/lib/gettext-0.19.1
# make && make install
# cd /tmp/make/nsenter
# wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.2.tar.xz
# tar xvf util-linux-2.24.2.tar.xz
# cd util-linux-2.24.2
# CFLAGS=-I/opt/lib/gettext-0.19.1/include LDFLAGS=-L/opt/lib/gettext-0.19.1/lib ./configure --prefix=/opt/lib/util-linux-2.24.2
# make && make install
これで /opt/lib/util-linux-2.24.2/bin/nsenter
に nsenter
本体がインストールされた。ただ、このままだとちょっと使い勝手が 悪いので、
#!/bin/sh
/opt/lib/util-linux-2.24.2/bin/nsenter \
--mount --uts --ipc --net --pid --target \
`docker inspect --format '{{.State.Pid}}' $1`
とかいうファイルを /usr/bin/docker-nsenter
として置いておくとよい。 で、つなげたい動作中コンテナのコンテナIDを docker ps
で調べて、
# docker-nsenter コンテナID
とやると、みごとお好きなコンテナにアタッチできました。ぱちぱち…。
…めんどくさい。