docker プロセスにアタッチできますが、Ctrl+cでデタッチできません。exit
基本的にプロセスを停止します。
プロセスを実行し、ときどきプロセスにアタッチして変更を加え、その後デタッチするための推奨されるワークフローは何ですか?
docker プロセスにアタッチできますが、Ctrl+cでデタッチできません。exit
基本的にプロセスを停止します。
プロセスを実行し、ときどきプロセスにアタッチして変更を加え、その後デタッチするための推奨されるワークフローは何ですか?
実行中のコンテナからデタッチするには、^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 システムでは、これが役立つとは思いませんでした。
コンテナから切り離すには、押したまま+Ctrlを押します。PQ
実行中のコンテナにアタッチするには、次を使用します。
$ docker container attach "container_name"
docker ps
docker kill ${containerId}
取り付けと取り外しに関するドキュメントが少し複雑であることがわかりました。
コンテナを起動して別のターミナルから接続するためのさまざまなオプションを試しました。次の表に結果をまとめます。
次の列の意味があります。
-d
- オプションをdocker run -d
使用するかどうか--sig-proxy
docker attach --sig-proxy=true|false
- は使用しないオプションです--no-stdin
docker 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 つの方法で実行できます。
docker run [-i|-t]
別の端末から接続するにはdocker attach --sig-proxy=false CONT
-> を押しますCtrl+C
docker run -it
別の端末から接続するにはdocker attach
-> を押しますCtrl+P Ctrl+Q
docker run -it
別の端末から接続するにはdocker attach --no-stdin
-> を押しますCtrl+C
(もちろん、コンテナ名やイメージなどのコマンドに必要な他の引数を提供する必要があります)
-i
PSと-t
(そのうちの 1 つだけ)を使用してさまざまなシナリオを試しましたが、動作に違いはありませんでした。@ken-cochrane が以下を提供しているのを見ました。
docker run -i → ^P^Q でデタッチできません。標準入力を中断します
しかし、私はこれを再現することに成功していません。
ドッカープロセスをバックグラウンドで実行するだけでよい場合は、使用できます
Ctrl+Z
これは実際のデタッチではなく、パフォーマンスが低下することに注意してください。(コマンドでフォアグラウンドに戻すことができますbg
)。
別のオプションは、端末が不要になった場合は端末を閉じることです。