docker覆盖networking创build过程中如何避免竞争条件?

我有两台机器HostA和HostB与领事和docker守护程序正确configuration,以便我可以使用docker network create -d overlay sharednet

我有一个TestScript.sh来检查networking是否存在,如果不是创buildnetworking。 这个脚本在HostA和HostB上都可用。 我也只有A上有一个MasterScript.sh ,它基本上只是在每台机器上调用TestScript.sh 。 运行我的MasterScript.sh ,我看到一个令人惊讶的结果,两个同名的networking被创build了! 这可以说是一个docker守护进程同步问题。

 [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 

预期的行为是,当我在HostA上创build一个networkingtestnw ,然后在HostB上,我应该看到这样的东西

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

由于一些限制,我不能修改MasterScript.sh ,但我可以修改我的TestScript.sh 。 所以问题是,在这个限制下,我能否解决这种竞争条件呢?

这个问题已经报告给Docker Github,目前正在通过https://github.com/docker/docker/issues/20648进行跟踪