535

docker プロセスにアタッチできますが、Ctrl+cでデタッチできません。exit基本的にプロセスを停止します。

プロセスを実行し、ときどきプロセスにアタッチして変更を加え、その後デタッチするための推奨されるワークフローは何ですか?

4

17 に答える 17

768

シェルを終了せずに tty をデタッチするには、エスケープ シーケンスCtrl+のP後にCtrl+を使用しQます。詳細はこちら

このソースからの追加情報:

  • docker run -t -i → ^P^Qdocker attach でデタッチおよび再アタッチできます
  • docker run -i → でデタッチできません^P^Q。標準入力を中断します
  • docker run → でデタッチできません^P^Q。クライアントを SIGKILL できます。docker attach で再接続できます
于 2013-10-30T16:52:08.930 に答える
51

実行中のコンテナからデタッチするには、^P^Q(hold Ctrl, press P, press Q, release Ctrl) を使用します。

問題があります。これは、コンテナーが との両方 -tで開始された場合にのみ機能し-iます。

これらのオプションのいずれか (または両方) なしで開始された実行中のコンテナーがあり、 でアタッチするdocker attach場合は、別の方法でデタッチする必要があります。選択したオプションと実行中のプログラムによっては、動作する^C場合もあれば、コンテナー全体が強制終了される場合もあります。実験する必要があります。

別の問題:使用しているプログラムによっては、端末、シェル、SSH クライアント、またはマルチプレクサが、^Pまたは^Q(通常は後者) のいずれかを傍受している可能性があります。これが問題かどうかをテストするには、--detach-keys z引数を使用して実行またはアタッチしてみてください。zこれで、修飾子なしで を押すことでデタッチできるはずです。これが機能する場合は、別のプログラムが干渉しています。これを回避する最も簡単な方法は、引数を使用して独自のデタッチ シーケンスを設定することです。--detach-keys(たとえば、 で終了するには^K、 を使用します--detach-keys 'ctrl-k'。) または、端末またはその他の干渉プログラムでキーのインターセプトを無効にすることもできます。たとえば、stty start ''またはstty start undef端末が傍受するのを防ぐことができます^Q一部の POSIX システムでは、これが役立つとは思いませんでした。

于 2018-03-12T00:22:12.070 に答える
11

コンテナから切り離すには、押したまま+Ctrlを押します。PQ

実行中のコンテナにアタッチするには、次を使用します。

$ docker container attach "container_name"
于 2017-07-24T08:18:41.530 に答える
1
  1. 新しいターミナルを開く
  2. 実行中のコンテナー ID を見つけるdocker ps
  3. コンテナを殺すdocker kill ${containerId}
于 2019-09-29T18:48:16.463 に答える
0

取り付けと取り外しに関するドキュメントが少し複雑であることがわかりました。

コンテナを起動して別のターミナルから接続するためのさまざまなオプションを試しました。次の表に結果をまとめます。

愛着行動

次の列の意味があります。

  • -d- オプションをdocker run -d使用するかどうか
  • --sig-proxydocker attach --sig-proxy=true|false- は使用しないオプションです
  • --no-stdindocker attach [--no-stdin]- は使用しないオプションです
  • keys- Docker がコンテナー化されたアプリケーションに入力キーを送信するかどうか
  • ^C- ユーザーが押したときに何が起こったかCtrl+C
  • ^P ^Q- ユーザーが押したときに何が起こったかCtrl+P Ctrl+Q

いくつかの発見があります:

  • -dアタッチメントの動作はオプションに依存しませんが、 from-i-t

  • 別のターミナルからのコンテナへの接続 (たとえばdocker attach --sig-proxy=false、接続オプションを変更することができます) または現在のターミナルからの接続 (ただし、接続オプションを変更することはできません; --sig-proxy=true)のいずれかで列を接続することを検討できます。

  • デタッチは実行中のオプションに依存し、次の 3 つの方法で実行できます。

    1. docker run [-i|-t]別の端末から接続するにはdocker attach --sig-proxy=false CONT-> を押しますCtrl+C
    2. docker run -it別の端末から接続するにはdocker attach-> を押しますCtrl+P Ctrl+Q
    3. docker run -it別の端末から接続するにはdocker attach --no-stdin-> を押しますCtrl+C

(もちろん、コンテナ名やイメージなどのコマンドに必要な他の引数を提供する必要があります)

-iPSと-t(そのうちの 1 つだけ)を使用してさまざまなシナリオを試しましたが、動作に違いはありませんでした。@ken-cochrane が以下を提供しているのを見ました。

docker run -i → ^P^Q でデタッチできません。標準入力を中断します

しかし、私はこれを再現することに成功していません。

于 2021-08-10T16:23:34.483 に答える
-2

ドッカープロセスをバックグラウンドで実行するだけでよい場合は、使用できます

Ctrl+Z

これは実際のデタッチではなく、パフォーマンスが低下することに注意してください。(コマンドでフォアグラウンドに戻すことができますbg)。

別のオプションは、端末が不要になった場合は端末を閉じることです。

于 2019-11-12T16:11:35.137 に答える