我有两台机器 HostA 和 HostB 正确配置了 consul 和 docker 守护进程,以便我可以使用docker network create -d overlay sharednet
我必须TestScript.sh
检查网络是否存在,如果不存在则创建网络。这个脚本在 HostA 和 HostB 上都可用。我也有一个MasterScript.sh
only on A,它基本上只是TestScript.sh
在每台机器上调用。运行后MasterScript.sh
,我看到了一个令人惊讶的结果,创建了两个同名的网络!!!这可以说是一个 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 上创建网络testnw
时,在 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
. 所以问题是,我有可能在这个限制下解决这个竞争条件吗?