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の問題:すべての展開の前に
- 、私はすべてのコンテナを実行しているを停止し、削除し
docker-compose stop
とdocker-compose rm
を行うことができます - これは、同様に群れのためにポート80を解放します。 - 別の解決策は、複数のノードを持ち、リラックスすることです。 composeがコンテナを再作成すると、Swarmは誰もがポート80を使用していないランダムなノードを自動的に見つけ出し、この他のノードで新しいコンテナを開始します。
私は解決策1で動作することができますが、複数のノードがある場合に動作させる方法を知りたいと思います。
私の2つのアプローチの問題点は、通常、Webアプリケーションはドメイン登録に使用できるものを修正IPする必要があるということです。スウォームが自分のWebアプリケーションを無作為に選ばれたノードに配備する場合、どうすればこの問題を回避できますか?
私はRound-robin DNSを使用することができましたが、私のクラスタに例3ノードがある場合は、すべてのノードで自分のWebアプリケーションのインスタンスを1つ持っている必要があるので役立つかどうかはわかりません。しかし、これが当てはまる場合、私は同じ問題に遭遇しませんか? Swarmは誰かがまだポート80を使用していると考えているので、使用可能なポート80を持つノードは見つけられません。
この問題を回避するには?