2015-01-03 12 views
7

ドッカーのウェブサイトの公式ガイドから簡単な例があります。コンテナ内のプロセスを殺すには?ドッカーのトップコマンド

私は次のコマンドを実行します。

sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done" 
a66asdasdhqie123... 

そして、作成したコンテナからいくつかの出力を取る:

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 

次I:

sudo docker logs a66 
hello 
hello 
hello 
... 

その後、私は、コンテナの実行中のプロセスを検索コンテナの最初のプロセスを殺すようにしてください:

sudo docker exec a66 kill -9 25055 

しかし、私はそれを何も変えません。プロセスはまだ動作し、毎秒 "こんにちは"を出力します。何が悪いですか?この

答えて

8

私はあなたの状況を再現docker top <container>docker exec -it <container> ps -auxの間に異なるPIDがあります。 docker execを実行すると、コンテナの内部でコマンドが実行されます。=>コンテナのpidを使用する必要があります。さもなければ、あなたのケースではホストから直接ドッカーなしで殺すことができます:sudo kill -9 25055

+1

であり、通常は 'docker kill 'でプロセスを終了させるでしょう。 –

+0

コンテナ内のIDとIDの違いはなぜですか?つまり、上位のコマンドはホストマシンでPIDSを表示しますか? (申し訳ありませんが、私は今、携帯電話に出ている答えを確認できません) –

+1

はい、 'docker top'は明らかにホストのPIDを示しています。 –

1

チェック:(|)

ps | grep -i a66 | tr -s ' '|cut -f2 -d' '| 
{ 
    while read line; 
    do kill -9 $line; 
    done 
} 

各パイプの終わりまで左からコマンドを実行してから、このスタートを理解することが

簡素オプション:

kill $(pidof a66) 
+0

これはなんですか? 'ps | grep -i a66'それは動作しません –

+0

返品ステータスは何ですか? –

+0

私のやり方はうまくいかず、それをどうやってやるのかというのは問題です。 –

0

正しい回答を見つけるまでにしばらく時間がかかりましたが、コンテナ内からこのプロセスを管理する必要があります。ホストからdocker top a66を実行すると、PIDはホストからのものですが、Cygwinを使用している場合はそうではありません。それにかかわらず、bashまたはコンテナに何を持って戻って、ps auxkillのようなコマンドをコンテナ内に置いて同じプロセスの異なるPIDを見つけて管理する必要があります。

0

私はこのような何かを探していたが、私は見つけることができませんでしたし、私はこれをしなかった:

[ルート@ノートブック〜]#]ドッキングウィンドウexecがtadeu_debian PSの補助を-it | | grep ping | awk '{print $ 2}' | xargs -I {} docker exec -i tadeu_debian kill -9

Docker e xargsから2つの「execs」でした。

これは誰かを助けてくれることを願っています!