2016-04-08 9 views
0

Swarmクラスタにノードが1つしかなく、このノードでWebアプリケーションコンテナを再作成しようとしたときに、私はthisという問題に遭遇しました(ポート上でリッスンしているNode.JS Webアプリケーションの新しいバージョンを展開したい8030)Dockerでコンテナを再作成する方法複数ノードのSwarmクラスタで作成する?

は、古いコンテナを最初に停止し、それを削除せず、新しいものを作成しようとします。また、Swarmは停止したコンテナのポート制約も追跡するため、私のノードポート80はまだ使用中です(停止したコンテナによって):

Recreating 41910b0283eb_41910b0283eb_41910b0283eb_vagrant_web_1 
ERROR: unable to find a node with port 80 available 

この2つの解決策がありますsの問題:すべての展開の前に

  1. 、私はすべてのコンテナを実行しているを停止し、削除しdocker-compose stopdocker-compose rmを行うことができます - これは、同様に群れのためにポート80を解放します。
  2. 別の解決策は、複数のノードを持ち、リラックスすることです。 composeがコンテナを再作成すると、Swarmは誰もがポート80を使用していないランダムなノードを自動的に見つけ出し、この他のノードで新しいコンテナを開始します。

私は解決策1で動作することができますが、複数のノードがある場合に動作させる方法を知りたいと思います。

私の2つのアプローチの問題点は、通常、Webアプリケーションはドメイン登録に使用できるものを修正IPする必要があるということです。スウォームが自分のWebアプリケーションを無作為に選ばれたノードに配備する場合、どうすればこの問題を回避できますか?

私はRound-robin DNSを使用することができましたが、私のクラスタに例3ノードがある場合は、すべてのノードで自分のWebアプリケーションのインスタンスを1つ持っている必要があるので役立つかどうかはわかりません。しかし、これが当てはまる場合、私は同じ問題に遭遇しませんか? Swarmは誰かがまだポート80を使用していると考えているので、使用可能なポート80を持つノードは見つけられません。

この問題を回避するには?

答えて

1

ほとんどの場合、アプリケーションの前にロードバランサがあると思います。 DNSエントリはロードバランサをポイントし、コンテナが停止して開始されると、自身を再構成することができます。

そこには、docker eventsからそれを処理するいくつかのプロジェクトがあります。ここで私が知っているもののほんの一部です: