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 コマンドを実行しても、コンテナはまだ稼働しています。