LoginSignup
55
52

More than 5 years have passed since last update.

nsenter・docker-enterでコンテナに入る方法

Posted at

概要

nsenterdocker-enterコマンドを使う事で、コンテナ(namespace)にSSHを使わず入ることができまる。ここでは、セットアップの仕方と使い方を紹介。

課題

Dockerfile 等でENTRYPOINTをデーモンに指定すると、サーバの操作ができず、SSHログインすることが出来ない。CentOS6 の Docker コンテナであれば sshd を起動させておけるが、CentOS7 では環境によって systemd で sshd を起動させることが出来ないだけでなく、本来のコンテナの使い方としては推奨されていない
また、docker attach を使う場合は Ctrl+Pキーが無効のため、emacs等のキーバインドに支障がでる。

nsenter

nsenterとは?

Dockerで作った名前空間(ネームペース;namespace)に入るためのコマンドライン・ツール。nsenter の由来は「enter into namespaces」=「ネームスペースに入る」。

セットアップするには?

パッケージ util-linux のバージョン 2.23 以降に同梱(RHEL7等)。

パッケージが提供されない場合、docker を使ってセットアップする方法が簡単。

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

/usr/local/bin/ 以下にファイルが置かれる。

コンテナに入るには?

docker ps等でコンテナIDを確認するか、あるいはコンテナ名を引数にする。

書式:docker-enter <コンテナIDかコンテナ名>

例:daemon モードで実行する

# docker ps -l
CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS              PORTS               NAMES
88b0b089b522        zembutsu/centos6:httpd   /usr/sbin/httpd -D F   3 minutes ago       Up 3 minutes        80/tcp              focused_nobel

# docker-enter 88b0b089b522
bash-4.1# pwd ←ここからコンテナ操作
/
bash-4.1# exit ←終了
exit

なお、docker-enternsenterのラッパーであり、次の内容と同じ処理。

$ PID=$(docker inspect --format {{.State.Pid}} <コンテナ名かID>)
$ nsenter --target $PID --mount --uts --ipc --net --pid

参考

55
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
52