私はネットワークが存在し、ネットワークを作成していない場合かどうかを確認する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
を変更してください。問題は、この制限の下でこの競合状態を解決することが可能なのでしょうか?
の下に追跡されています。これはバグのようです。最初にすべてのホストのネットワークをチェックするのはなぜですか? 1つのホストでそれを行うのは十分ではないでしょうか? – morxa
@morxa各マシンには、ローカルドッカーコンテナを管理する 'TestScript.sh'のコピーがあり、適切なネットワークに接続しています。ネットワークが存在しない場合、スクリプトは単にネットワークを作成し、コンテナをネットワークに接続します。 'TestScript.sh'は本質的に完全に配布されており、設計上互いに話すことができないため、HostAのTestScript.shはHostBのTestScript.shがcreateコマンドを発行したかどうかを知りません。したがって、ネットワーク作成コマンドを同期させるために、ドッカーデーモンに依存する必要があります。 – cookieisaac
どのドッカーのバージョンを使用していますか? – morxa