У меня есть две машины Хоста и HostB с консулом и Докер демон правильно настроен так, что я могу использовать docker network create -d overlay sharednet
Как избежать состояния гонки при создании сети наложения докеров?
У меня есть TestScript.sh
, чтобы проверить, если сеть существует, и если не создать сеть. И этот скрипт доступен как на HostA, так и на HostB. У меня также есть MasterScript.sh
только на A, которые в основном просто вызывают TestScript.sh
на каждой машине. После того, как я запустил свой MasterScript.sh
, я вижу удивительный результат, создали две сети с тем же именем !!! Это, возможно, проблема синхронизации демона-докеров.
[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
Ожидаемое поведение является то, что, когда я создал сеть 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
. Итак, вопрос в том, могу ли я разрешить это состояние гонки под этим ограничением?
Я полностью согласен с вашим ожиданием; это похоже на ошибку. Почему вы проверяете сети на всех хостах в первую очередь? Разве не достаточно было бы сделать это на одном хозяине? – morxa
@morxa На каждой машине у меня есть копия 'TestScript.sh', управляющая локальными контейнерами докеров и присоединяющая их к соответствующим сетям. Если сети нет, сценарий будет просто создавать сеть и прикреплять контейнер к сети. Поскольку «TestScript.sh» полностью распределен по своей природе и по дизайну не может разговаривать друг с другом, TestScript.sh на HostA не знает, выдал ли TestScript.sh на HostB команду create или нет. Поэтому я должен полагаться на демон docker, чтобы синхронизировать команду создания сети. – cookieisaac
Какую версию докера вы используете? – morxa