読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

nsenter で簡単にDockerコンテナの中に入る

Vagrant と違って Docker コンテナって容易には中にアクセスできないですよね。 かと言って不要なSSHデーモンを入れるのもちょっとおかしい。 そこで便利なのが nsenter というツールです。ちなみにこれインストールも docker を使うというちょっとおもしろいものです。

 

◆環境

Ubuntu 14.04

Docker 1.0.1

 

◆インストール

$ docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

vオプションを使うことで、コンテナ内で作ったバイナリファイルを、ホスト側にインストール(保存)しています。

 

◆コンテナに入ってみる

前回作ったApacheコンテナに入ってみましょう。 書き方は以下です。

$ sudo docker-enter {CONTAINER ID}

このとき sudo が必要なので注意して下さい。 まずApacheコンテナのIDを調べてみます。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                NAMES
50d29075796d        apache:latest       /usr/sbin/apache2ctl   22 minutes ago      Up 22 minutes       0.0.0.0:80->80/tcp   prickly_engelbart   

これで 50d29075796d と分かったのではいってみます。

$ sudo docker-enter 50d29075796d
root@50d29075796d:~# 

bashコンソールに変わりましたね。Apacheコンテナの中にいるはずなのでApacheプロセスが立ち上がっているはずです。

# ps aux | grep apache
root         1  0.0  0.1   4444   716 ?        Ss   04:23   0:00 /bin/sh /usr/sbin/apache2ctl -D FOREGROUND
root        15  0.0  0.6  71300  3320 ?        S    04:23   0:00 /usr/sbin/apache2 -D FOREGROUND
www-data    16  0.0  0.5 426064  2736 ?        Sl   04:23   0:01 /usr/sbin/apache2 -D FOREGROUND
www-data    17  0.0  0.4 360464  2212 ?        Sl   04:23   0:01 /usr/sbin/apache2 -D FOREGROUND
root        85  0.0  0.1   8864   652 ?        S+   04:47   0:00 grep --color=auto apache

フォアグラウンドで立ちあげたApacheプロセスが確認できました。 これで急に何かログとか仕込みたくなったときにも毎回ビルドせずに済みます。 他にも nsinit というツールがあるのですが、こちらはちょっとインストールが面倒らしいです。 以上です。お疲れ様でした。

 

ソース:

Dockerfileとdocker buildコマンドでDockerイメージの作成 (2/2)

RHEL/CentOS 6で Docker に nsinit/nsenter する

nsinit が上手く行かなくて困っていたら nsenter があまりにもあっさりだった件