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进行跟踪