web-dev-qa-db-ja.com

コンテナ内のプロセスを強制終了するには? Docker topコマンド

ドッカーのウェブサイトの公式ガイドから簡単な例があります。

私は次を実行します:

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」を出力します。何が悪いの?

16

あなたの状況を再現すると、docker top <container>docker exec -it <container> ps -auxの間に異なるPIDが表示されます。 docker execを実行すると、コンテナ内でコマンドが実行されます=>コンテナのpidを使用する必要があります。それ以外の場合、ホストから直接dockerを使用せずにkillを実行できます。この場合、Sudo kill -9 25055です。

15
Mykola Gurov

これをチェックして:

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でした。

まあ、これが誰かを助けることを願っています!

0
Tadeu Bernacchi

正しい答えを見つけるためにしばらく時間がかかりましたが、このプロセスをコンテナ内から管理する必要があります。ホストからdocker top a66を実行すると、PIDはホストから取得されますが、Cygwinを使用している場合はそうではありません。とにかく、bashまたはwhat-have-youをコンテナに戻し、コンテナ内でps auxkillなどのコマンドを使用して、異なるPIDを見つけて管理する必要があります。そこに同じプロセス。

0