2016-03-18 3 views
1

У меня есть две машины Хоста и 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. Итак, вопрос в том, могу ли я разрешить это состояние гонки под этим ограничением?

+0

Я полностью согласен с вашим ожиданием; это похоже на ошибку. Почему вы проверяете сети на всех хостах в первую очередь? Разве не достаточно было бы сделать это на одном хозяине? – morxa

+0

@morxa На каждой машине у меня есть копия 'TestScript.sh', управляющая локальными контейнерами докеров и присоединяющая их к соответствующим сетям. Если сети нет, сценарий будет просто создавать сеть и прикреплять контейнер к сети. Поскольку «TestScript.sh» полностью распределен по своей природе и по дизайну не может разговаривать друг с другом, TestScript.sh на HostA не знает, выдал ли TestScript.sh на HostB команду create или нет. Поэтому я должен полагаться на демон docker, чтобы синхронизировать команду создания сети. – cookieisaac

+0

Какую версию докера вы используете? – morxa

ответ

Смежные вопросы