Docker-コンテナとシェル
デフォルトでは、コンテナを起動するときに、 shell command以下に示すようにコンテナを起動している間。これは、前の章でコンテナを操作していたときに見たものです。
上のスクリーンショットでは、次のコマンドを発行したことがわかります-
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を介してプロセスIDを取得できますinspect command を介してそれをフィルタリングします Pid。
上のスクリーンショットに見られるように、私たちは最初に docker ps実行中のコンテナを表示するコマンド。IDがef42a4c5e663の実行中のコンテナーが1つあることがわかります。
次に、Dockerを使用します inspect このコンテナの構成を検査してから、 grepプロセスIDをフィルタリングするコマンド。そして、出力から、プロセスIDが2978であることがわかります。
プロセスIDを取得したので、先に進んで使用できます。 nsenter Dockerコンテナにアタッチするコマンド。
nsenter
この方法では、コンテナを終了せずにコンテナにアタッチできます。
構文
nsenter –m –u –n –p –i –tcontainerIDコマンド
オプション
-u 言及するために使用されます Uts namespace
-m 言及するために使用されます mount namespace
-n 言及するために使用されます network namespace
-p 言及するために使用されます process namespace
-i ■コンテナをインタラクティブモードで実行します。
-t コンテナのI / OストリームをホストOSに接続するために使用されます。
containerID −これはコンテナのIDです。
Command −これはコンテナ内で実行するコマンドです。
戻り値
なし
例
sudo nsenter –m –u –n –p –i –t 2978 /bin/bash
出力
出力から、次の点を観察できます。
プロンプトがに変わります bash shell を発行するときに直接 nsenter コマンド。
次に、 exitコマンド。今通常あなたが使用しなかった場合nsenterコマンドを実行すると、コンテナは破棄されます。しかし、私たちが実行すると、nsenter コマンドを実行しても、コンテナはまだ稼働しています。