GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Dockerコンテナを停止せずに切り離す方法

Dockerコンテナーには、端末の入力ストリームと出力ストリームをコンテナーのプロセスにアタッチできるインタラクティブモードがあります。 Ctrl-Cを押すと、通常、そのプロセスが終了し、
コンテナが停止します。コンテナを停止せずにセッションからデタッチします。

停止せずに切り離す

Dockerは、コンテナーから適切にデタッチするためのキーボードの組み合わせをサポートしています。 Ctrl-Pを押してからCtrl-Qを押して、接続を解除します。

シェルにドロップバックされますが、以前にアタッチされたプロセスは存続し、コンテナは実行されたままになります。これは、 docker psを使用して確認できます。 実行中のコンテナのリストを取得します。

Ctrl-Cを押すか、 exitを実行します コマンドは通常、特別に構成されていない限り、コンテナのフォアグラウンドプロセスを強制終了します。 Dockerコンテナーには、実行中のフォアグラウンドプロセスが必要です。コンテナがない場合は停止状態になります。

デタッチキーボードシーケンスの変更

好みに合わせてデタッチシーケンスを変更したり、アプリケーションで使用されるキーボードショートカットとの競合を回避したりできます。 detachKeysを追加します 〜/ .docker / config.jsonのプロパティ 使用するキーを指定するファイル。

Dockerはa-zをサポートします 文字と@ ^ 、および _ 、記号、および左角かっこ記号( [ )と2つのバックスラッシュ( \ )。これらはすべて、Ctrl-と組み合わせて使用​​されます 鍵; Ctrl を使用せずに、文字を個別に使用することもできます 。

キーシーケンスは、コンマ区切りのリストとして表されます:

{
    "detachKeys": "Ctrl-d,d"
}

この例では、 Ctrl-Dを押すとコンテナから切り離されます。 直後にdが続きます キー。

コンテナごとにシーケンスを変更する

Dockerは、グローバル構成を変更するだけでなく、 detachKeysを受け入れます。 コンテナごとおよびアタッチメントごとにオーバーライドします。 -detach-keysを追加します 特定のシーケンスを設定するためにコンテナプロセスにアタッチできるコマンドにフラグを立てます。

これをサポートするコマンドは次のとおりです。

  • ドッカー実行
  • ドッカースタート
  • docker exec
  • ドッカーアタッチ

コンテナにアタッチしてからCtrl-dを使用する方法は次のとおりです 、その後にアンダースコアを付けて、切り離します:

docker attach my-container --detach-keys="Ctrl-d,_"

-detach-keys flagは、 detachKeysと同じキーシーケンス形式を使用します 構成オプション。フラグはdocker.jsonをオーバーライドします 設定;これにより、DockerのデフォルトのCtrl-P/Ctrl-Qシーケンスが上書きされます。

キーボードシーケンスが機能しない場合のデタッチ

キーボードシーケンスを発行した場合でも、デタッチを拒否するコンテナプロセスに遭遇する場合があります。これは、コンテナの入力ストリームが端末に接続されていない場合に発生する可能性があります( -i フラグ)または疑似TTYが割り当てられていない( -t 国旗)。コンテナのプロセスがデタッチキーシーケンスを処理し、アタッチ時にオーバーライドしなかった場合にも、この問題が発生する可能性があります。

このような状況でも、ターミナルをコンテナから取り外すことは可能です。別のシェルウィンドウを一時的に開き、それを使用して docker.attachを強制終了する必要があります 添付ファイルをアクティブに保つプロセス。

まず、添付プロセスのプロセスIDを見つけます:

ps -ef | grep attach

psからの出力を使用します docker.attachを識別するため あなたが殺す必要があるプロセス。 CMDのコマンド 列は、探している添付ファイルを識別する必要があります。関連するPID番号を書き留めて、 killを使用します このプロセスを強制終了するコマンド:

kill -9 <PID>

元のシェルがDockerコンテナから切り離され、通常の動作状態に戻るはずです。これで、2番目のシェルを閉じて、元のシェルを引き続き使用できます。

この手法は、ターミナルを実行し続けるコンテナー内のプロセスではなく、ターミナルをコンテナーに接続したDockerCLIプロセスを強制終了することで機能します。元の端末が再び使用可能になり、コンテナは稼働したままになります。

コンテナへの再接続

docker attachを使用してコンテナに再接続できます 指図。これにより、端末の入力、出力、およびエラーストリームが指定されたコンテナに自動的に添付されます。

docker attach my-container

デフォルトでは、3つのストリームすべてが接続されています。 -no-stdin を渡すことで、入力ストリームを省略できます。 国旗。コンテナの出力は端末にストリーミングされますが、入力を提供することはできません。

キーボードシーケンスをもう一度使用して切り離すか、 Ctrl-C プロセスとコンテナを停止します。 Ctrl-Cを使用する場合 またはexit docker attach $?を設定します コンテナの終了コードを検査できるように、シェルの変数を正しく設定してください。

概要

Dockerコンテナーからデタッチする正しい方法は、かなりあいまいなキーボードシーケンスであり、シェルに戻ります。このシーケンスをカスタマイズして、覚えやすくし、コンテナのキーボード処理との競合を回避できます。

キーボードのデタッチシーケンスは、状況によっては効果がない場合があります。アタッチメントをサポートしているプロセスを特定して強制終了することで、コンテナから切り離すことができます。 psなどの通常のUnixコマンド およびkill このシナリオでは使用する必要があります。

最後に、コンテナを完全に切り離したい場合は、 -dで開始します。 フラグ( docker run -d my-image:latest )。これにより、コンテナがバックグラウンドに直接送信され、シェルに出力が出力されなくなります。切り離されたコンテナは、 docker psを使用して常に表示されます コマンドであり、 docker stop my-containerで停止できます 。


Docker
  1. Dockerを使用してWordPressをインストールする方法

  2. Dockerコンテナに静的IPを割り当てる方法

  3. コンテナと Dockerfile から Docker イメージを作成する方法

  1. DockerコンテナでMySQLを実行する方法

  2. DockerコンテナにSSHで接続する方法

  3. DockerコンテナにVimをインストールする方法

  1. Dockerコンテナを一覧表示する方法

  2. Dockerコンテナを終了する方法

  3. Dockerコンテナからカスタムイメージを作成する方法