Docker-containers-and-shells
提供:Dev Guides
Docker-コンテナーとシェル
デフォルトでは、コンテナを起動するときに、以下に示すように、コンテナを起動するときに* shellコマンド*も使用します。 これは、以前の章でコンテナを操作していたときに見たものです。
上記のスクリーンショットでは、次のコマンドを発行したことがわかります-
sudo docker run –it centos/bin/bash
このコマンドを使用して新しいコンテナを作成し、Ctrl + P + Qコマンドを使用してコンテナを終了しました。 コンテナを終了した後でも、コンテナが存在し続けることが保証されます。
Docker ps コマンドを使用して、コンテナーがまだ存在することを確認できます。 コンテナから直接退出する必要がある場合、コンテナ自体が破棄されます。
コンテナに接続し、それらを破壊することなくきれいに終了する簡単な方法があります。 これを達成する1つの方法は、 nsenter コマンドを使用することです。
*nsenter* コマンドを実行する前に、まず *nsenter* イメージをインストールする必要があります。 それは、次のコマンドを使用して行うことができます-
docker run --rm -v/usr/local/bin:/target jpetazzo/nsenter
*nsenter* コマンドを使用する前に、コンテナのプロセスIDを取得する必要があります。これは、 *nsenter* コマンドで必要になるためです。 Docker * inspectコマンド*でプロセスIDを取得し、 *Pid* でプロセスIDをフィルタリングできます。
上記のスクリーンショットに見られるように、最初に docker ps コマンドを使用して、実行中のコンテナーを確認しました。 IDがef42a4c5e663の実行中のコンテナが1つあることがわかります。
次に、Dockerの inspect コマンドを使用してこのコンテナの構成を検査し、 grep コマンドを使用してプロセスIDをフィルタリングします。 出力から、プロセスIDが2978であることがわかります。
プロセスIDを取得したので、先に進み、 nsenter コマンドを使用してDockerコンテナーにアタッチできます。
入センター
このメソッドを使用すると、コンテナを終了せずにコンテナに接続できます。
構文
nsenter –m –u –n –p –i –t containerIDコマンド
オプション
- -u は* Uts名前空間*を示すために使用されます
- -m は* mount名前空間*に言及するために使用されます
- -n は*ネットワーク名前空間*を示すために使用されます
- -p は、*プロセス名前空間*に言及するために使用されます
- -i sは、コンテナをインタラクティブモードで実行します。
- -t は、コンテナのI/OストリームをホストOSに接続するために使用されます。
- containerID -これはコンテナのIDです。
- コマンド-これはコンテナ内で実行するコマンドです。
戻り値
None
例
sudo nsenter –m –u –n –p –i –t 2978/bin/bash
出力
出力から、次の点を観察できます-
- nsenter コマンドを発行すると、プロンプトは直接* bashシェル*に変わります。
- 次に、 exit コマンドを発行します。 通常、 nsenter コマンドを使用しなかった場合、コンテナーは破棄されます。 しかし、 nsenter コマンドを実行しても、コンテナーはまだ稼働していることに気付くでしょう。