dockerプロセスにアタッチできますが、Ctrl+ cから切り離すことができません。exit
基本的にプロセスを停止します。
プロセスを実行し、時々アタッチして変更を加え、その後デタッチするための推奨ワークフローは何ですか?
xterm
、konsole
など、仕事を?それは私のために働きます(私は離れてしまいます)。
dockerプロセスにアタッチできますが、Ctrl+ cから切り離すことができません。exit
基本的にプロセスを停止します。
プロセスを実行し、時々アタッチして変更を加え、その後デタッチするための推奨ワークフローは何ですか?
xterm
、konsole
など、仕事を?それは私のために働きます(私は離れてしまいます)。
回答:
シェルを終了せずにttyを切り離すには、エスケープシーケンスCtrl+のP後にCtrl+を使用しQます。詳細はこちら。
このソースからの追加情報:
^P^Q
docker attachでデタッチおよび再アタッチできます^P^Q
。stdinを混乱させる^P^Q
。クライアントをSIGKILLできます。docker attachで再接続できます"detachKeys": "ctrl-a,a"
、あなたの.docker / config.jsonファイルまたは --detach-keys "ctrl-a,a"
その他添付して、コマンドラインで
Ctrl + Z
分離しません。プロセスの背景のみです。デタッチとは異なり、パフォーマンスが低下します。
docker run -ti --sig-proxy=false busybox top
いないようですが、プロセスはctrl-cで強制終了されますが docker run -t -sig-proxy=false busybox top
、動作するようで、ctrl-cで終了できるようになっています
Ctrl-c
コンテナも停止します。
ファイルに何らかの変更を加えたり、プロセスを検査したりするだけの場合は、おそらく別のソリューションが必要です。
次のコマンドを実行して、既存のコンテナから新しいプロセスを実行できます。
sudo docker exec -ti [CONTAINER-ID] bash
bashシェルで新しいプロセスを開始し、直接Ctrl+でエスケープすることができCます。元のプロセスには影響しません。
exec
いますが、そうではありません。
これは状況に応じて異なると思います。次のコンテナを例にとります。
# docker run -it -d ubuntu
91262536f7c9a3060641448120bda7af5ca812b0beb8f3c9fe72811a61db07fc
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 5 seconds ago Up 4 seconds serene_goldstine
(1) " docker attach
"を使用してコンテナをアタッチします。
「docker attach
」は新しいttyを割り当てませんが、元の実行中のttyを再利用するため、exit
コマンドを実行すると、実行中のコンテナーが終了します。
# docker attach 91262536f7c9
exit
exit
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 39 minutes ago Exited (0) 3 seconds ago serene_goldstine
したがって、実行中のコンテナを本当に終了させたいのでない限り、Ctrl+ p+ Ctrl+ を使用する必要がありますq。
(2)「docker exec
」を使用
「docker exec
」は新しいtty を割り当てるためexit
、Ctrl+ p+ Ctrl+の代わりに使用する必要があると思いますq。
以下は、コンテナを終了するためにCtrl+ p+ Ctrl+ qを実行しています。
# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss 04:03 0:00 bash
root 28 0.0 0.0 15564 1148 ? R+ 04:03 0:00 ps -aux
root@91262536f7c9:/# echo $$
15
次に、コンテナに再度ログインするとbash
、前のdocker exec
コマンドのプロセスがまだ有効であることがわかります(PIDは15)。
# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss+ 04:03 0:00 bash
root 29 0.0 0.0 18164 1888 ? Ss 04:04 0:00 bash
root 42 0.0 0.0 15564 1148 ? R+ 04:04 0:00 ps -aux
root@91262536f7c9:/# echo $$
29
実行中のコンテナから切り離すには、を使用します^P^Q(をCtrl押しながら、を押しP、を押してQ、を離しますCtrl)。
落とし穴があります。これは、コンテナがとの両方 -t
で開始された場合にのみ機能し-i
ます。
これらのオプションのいずれか(または両方)なしで開始された実行中のコンテナーがあり、を使用して接続するdocker attach
場合は、分離する別の方法を見つける必要があります。選択したオプションと実行中のプログラムによっては、機能する場合と、^Cコンテナ全体が強制終了する場合があります。実験する必要があります。
もう1つの問題:使用しているプログラムに応じて、ターミナル、シェル、SSHクライアント、またはマルチプレクサーが、^Pまたは^Q(通常は後者)のいずれかを傍受している可能性があります。これが問題であるかどうかをテストするには、--detach-keys z
引数を指定して実行またはアタッチしてみてください。zこれで、モディファイアを使用せずに、を押してデタッチできるようになります。これが機能する場合、別のプログラムが干渉しています。これを回避する最も簡単な方法は、引数を使用して独自の切り離しシーケンスを設定する--detach-keys
ことです。(たとえば、で終了するには^K、を使用します--detach-keys 'ctrl-k'
。)または、端末または他の干渉プログラムでキーのインターセプトを無効にすることを試みることができます。たとえば、stty start ''
またはstty start undef
端末が傍受するのを妨げる可能性があります^Q 一部のPOSIXシステムでは、これが役立つとは思っていません。
他に何も機能しない場合は、新しいターミナルを開いてください:
$ ps aux | grep attach
username <pid_here> .............. 0:00 docker attach <CONTAINER_HASH_HERE>
username <another_pid> .............. 0:00 grep --color=auto attach
$ kill -9 <pid_here>
-9
必要ありませんでした。
docker attach
。
私は、同じ問題を持っていたctrl- PとQの仕事ではないだろう、でもctrl- C最終的に私は別のターミナルセッションを開いて、私は「ドッキングウィンドウ停止しました... ContainerIDの」および「ドッキングウィンドウの開始ContainerIDのを」と、それは仕事を得ました。変だ。
--rm
フラグでコンテナを開始した場合、これは機能しません。Ctrl+P
そしてCtrl+Q
あなたがコンテナを開始した場合に動作-it
フラグ。
私は、Mac上だし、いくつかの理由のために、Ctrl- p Ctrl- q私も保持していた場合にのみ動作しますShift
docker ps
docker kill ${containerId}
同じ問題に遭遇した人のために(デタッチキーを設定した場合でも、コンテナーを強制終了せずにデタッチすることはできません)......
コンテナを docker-compose up -d
使用する代わりに docker attach {container name}
してテーリングログを表示する ....
試してくださいdocker-compose logs -f {service name}
ctrl-cあなたのコンテナを殺すことなく、ログの末尾を殺します
{service name}
docker-compose.ymlファイルの横にリストされているサービスです。 docker(例:コンテナー名= elk_logstash_1->サービス名= logstash
HTH
私は通常、コンテナのトラブルシューティングのために、docker attachを使用して、STDOUTが表示していたものを確認しました。見つけたdocker logs --follow 621a4334f97b
。コンテナの操作に影響を与えずに、STDOUTを表示しながら、Ctrl + Cでそれをオフにすることができます。まさに私がずっと欲しかったもの。
...当然、独自のコンテナIDで置き換える必要があります。
コンテナを実行したままにしたかったのですが、コンテナをで起動せずにアタッチしていました-it
。私の解決策は、代わりにSSH接続を犠牲にすることでした(コンテナーを実行しているマシンにSSH接続されたため)。そのsshセッションを終了すると、コンテナーはそのまま残りましたが、コンテナーから切り離されました。