ドッカーのウェブサイトの公式ガイドから簡単な例があります。
私は次を実行します:
Sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"
a66asdasdhqie123...
次に、作成されたコンテナから出力を取得します。
Sudo docker logs a66
hello
hello
hello
...
次に、コンテナの実行中のプロセスを検索します。
Sudo docker top a66
UID PID PPID C STIME TTY TIME CMD
root 25055 15152 0 20:07 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done
root 25295 25055 0 20:10 ? 00:00:00 sleep 1
次に、コンテナの最初のプロセスを強制終了します。
Sudo docker exec a66 kill -9 25055
ただし、変更しても何も変わりません。プロセスは引き続き動作し、毎秒「hello」を出力します。何が悪いの?
あなたの状況を再現すると、docker top <container>
とdocker exec -it <container> ps -aux
の間に異なるPIDが表示されます。 docker exec
を実行すると、コンテナ内でコマンドが実行されます=>コンテナのpidを使用する必要があります。それ以外の場合、ホストから直接dockerを使用せずにkillを実行できます。この場合、Sudo kill -9 25055
です。
これをチェックして:
ps | grep -i a66 | tr -s ' '|cut -f2 -d' '|
{
while read line;
do kill -9 $line;
done
}
これを理解するには、各パイプの左から最後までコマンドを実行することから始めます(|)
よりシンプルなオプション:
kill $(pidof a66)
私はこのようなものを探していましたが、見つけることができなかったので、これをしました:
[root @ notebook〜]#docker exec -it tadeu_debian ps aux | grep ping | awk '{print $ 2}' | xargs -I {} docker exec -i tadeu_debian kill -9
Dockerからの2つの「exec」と1つのxargsでした。
まあ、これが誰かを助けることを願っています!
正しい答えを見つけるためにしばらく時間がかかりましたが、このプロセスをコンテナ内から管理する必要があります。ホストからdocker top a66
を実行すると、PIDはホストから取得されますが、Cygwinを使用している場合はそうではありません。とにかく、bash
またはwhat-have-youをコンテナに戻し、コンテナ内でps aux
やkill
などのコマンドを使用して、異なるPIDを見つけて管理する必要があります。そこに同じプロセス。