2017-01-30 10 views
1

私はdocker-composeを利用するアプリケーションを開発中です。コンテナの1つはウォッチドッグコンポーネントであり、小さなPythonスクリプトを定期的に実行して兄弟コンテナの状態を取得し、コンテナの1つが停止した場合にアクションを実行します。同じドッカーのコンテナを表示する

この時点までに、監視する必要があるすべてのコンテナ名のリストを使用しましたが、同じdocker-composeコマンドで作成されたすべてのコンテナを見ることができます。

は以前、コードはこのような何かに見えた:

watched_containers = ["component-a", "component-b"] 
def inspect_containers(): 
    containers = { 
     (container["Names"][0].lstrip("/"), container) 
     for container in docker.Client().containers(all=True) 
    } 

    for container_name in watched_containers: 
     if containers.get(container_name, {}).get("State") != "running": 
      alert_container_stopped(container_name) 

を私はdockerpydocker-composeを知らないことがわかったので、私はドッキングウィンドウ-COMPOSEプロジェクト名ラベルに基づいてコンテナをフィルタリング機能(com.docker.compose.project)を作成しました今はコンテナ名の代わりにハードコードされたプロジェクト名があります。現在のプロジェクト名を取得する方法はありますか、同じコンポジション内のコンテナのリストを取得する他の方法はありますか?

ありがとうございました

答えて

1

これは私の頭の上からちょっとしたアイデアです。

ウォッチドッグコンテナでDockerクライアントライブラリを使用しているため、ウォッチドッグコンテナ内からホストのDocker APIにアクセスできると仮定しています。各コンテナのホスト名はデフォルトでコンテナIDであるため、これを使用してウォッチドッグコンテナにDocker APIから独自のラベルを検索させることができます。

以下は、Docker CLIを使用した例です。

$ COMPOSE_PROJECT=$(docker inspect -f '{{ (index .Config.Labels "com.docker.compose.project") }}' $HOSTNAME) 

その後、残りのコンテナを取得するために、プロジェクト名を使用します:PythonのSDKには、まったく同じように動作するはずです

$ docker ps -aq -f label=com.docker.compose.project=$COMPOSE_PROJECT 
+0

私のシステムでは、コンテナ内のホスト名変数がContainerIDのに設定されていないが、私はそれを得る他の方法を見つけました(cgroupを使って)。 –

関連する問題