2016-03-18 20 views
1

私はネットワークが存在し、ネットワークを作成していない場合かどうかを確認するTestScript.shを持っているdocker network create -d overlay sharednetドッカーオーバレイネットワークの作成中に競合状態を回避するにはどうすればよいですか?

を使用できるように、適切に構成領事とドッキングウィンドウデーモンとの二台のマシンホストAとホストBを持っています。このスクリプトは、HostAとHostBの両方で使用できます。私はまた、MasterScript.shをA上に持っています。基本的には、各マシン上でTestScript.shを呼び出すだけです。 MasterScript.shを実行した後、同じ名前の2つのネットワークが作成されたという驚くべき結果が表示されます。おそらくドッカーのデーモンの同期の問題です。

[HostA]# docker network ls 
NETWORK ID   NAME     DRIVER 
ad492bba9efa  sharednet   overlay 
ba53d4e7b739  sharednet   overlay 

[HostB]# docker network ls 
NETWORK ID   NAME     DRIVER 
ad492bba9efa  sharednet   overlay 
ba53d4e7b739  sharednet   overlay 

予想される動作は、私がホストA上でネットワークtestnwを作成したときに、その後、ホストBに私が原因私はMasterScript.sh変更することはできませんいくつかの制限にこの

[HostB]# docker network ls 
68994f95cd67  testnw    overlay 
[HostB]# docker network create -d overlay testnw 
Error response from daemon: network with name testnw already exists 

のようなものを見なければならないことですが、私はすることができます私のTestScript.shを変更してください。問題は、この制限の下でこの競合状態を解決することが可能なのでしょうか?

+0

の下に追跡されています。これはバグのようです。最初にすべてのホストのネットワークをチェックするのはなぜですか? 1つのホストでそれを行うのは十分ではないでしょうか? – morxa

+0

@morxa各マシンには、ローカルドッカーコンテナを管理する 'TestScript.sh'のコピーがあり、適切なネットワークに接続しています。ネットワークが存在しない場合、スクリプトは単にネットワークを作成し、コンテナをネットワークに接続します。 'TestScript.sh'は本質的に完全に配布されており、設計上互いに話すことができないため、HostAのTestScript.shはHostBのTestScript.shがcreateコマンドを発行したかどうかを知りません。したがって、ネットワーク作成コマンドを同期させるために、ドッカーデーモンに依存する必要があります。 – cookieisaac

+0

どのドッカーのバージョンを使用していますか? – morxa

答えて

関連する問題