4

cadvisor を導入した後、docker ホストからコンテナーを削除する際に問題が発生しています - https://github.com/google/cadvisor/issues/771

これらの docker ホストにサービス コンテナーをインストールするために使用する多数の Ansible (2.2.1.0) スクリプトがあり、内部では docker_container モジュールを使用しています。多くの場合、これらのスクリプトはコンテナーを削除しようとしますが、上記の問題のために失敗しています。

これらの docker ホストで簡単に docker コンテナーを強制終了できます。

docker rm container_name -fv

したがって、 docker_container モジュール ( docker_container module docs )で提供される force_kill オプションでも同じことができるはずです。

- name: Delete  docker containers
  docker_container:
    name: "container_name"
    force_kill: true
    keep_volumes: false
    state: absent

しかし、スクリプトは常に失敗します。強制終了できない場合、このオプションの目的がわかりません。force_kill を有効にした後でも、すべてのスクリプトが失敗します。このオプションが意図したとおりに機能することを確認する方法を知る必要がありますか?

更新: force_kill オプションが docker kill シグナルを送信していることを理解しました。私が本当に達成したいことをよりよく反映するように質問を更新しました。

4

1 に答える 1

2

docker killforce_killとして kill シグナルを送信すると思います

コンテナー内のメイン プロセスには、SIGKILL、またはオプション --signal で指定された任意のシグナルが送信されます。

イメージの Dockerfile で CMD および/または ENTRYPOINT を確認します (使用した場合)。

シェル形式の ENTRYPOINT と CMD は、シグナルを渡さない /bin/sh -c のサブコマンドとして実行されます。これは、実行可能ファイルがコンテナーの PID 1 ではなく、Unix シグナルを受信しないことを意味します。

CMD ["/init.sh"] # exec form
CMD /init.sh     # shell form

これが問題の原因かどうかはわかりませんが、シェル形式の CMD がコマンドにシグナルを転送しない可能性があります。

ドミニク・バートンのブログ

Docker にシグナルを (サブ) プロセスに転送させたい場合は、常に exec フォームを使用してください。これは、Docker コンテナーにカスタム シグナルを送信するために重要であるだけでなく、コンテナーを適切に停止 (つまり、docker stop) することも重要です。

于 2017-04-07T11:14:38.167 に答える