Менеджер роя Docker не может распознать узлы роя

Я следую этим шагам, чтобы создать кластер Docker swarm.

Первое: создать Кунсола

docker-machine create -d virtualbox mh-keystore  
eval "$(docker-machine env mh-keystore)"  
docker run -d \  
 -p "8500:8500" \  
 -h "consul" \  
 progrium/consul -server -bootstrap

Второе: создать менеджера роя

docker-machine create -d virtualbox node1  
docker run -d -p 4000:4000 swarm manage -H :4000 --replication --  advertise $(docker-machine ip node1):4000 consul://$(docker-machine ip mh-keystore):8500

Третье: создать узел роя

docker-machine create -d virtualbox node2  
docker run -d swarm join --advertise=$(docker-machine ip node2):2375   consul://$(docker-machine ip mh-keystore):8500  

Четвертое: вход в node1

docker-machine ssh node1  
docker -H :4000 info  

Но этот вывод инструкции

(неизвестно): 192.168.99.106:2375(node2 ip)
└ ID:
└ Статус: Pending
└ Контейнеры: 0
└ Зарезервированные процессоры: 0 / 0
└ Зарезервированная память: 0 B / 0 B
└ Ярлыки:
└ Ошибка: не удается подключиться к демону Docker. Работает ли на этом хосте демон docker?....

Как я могу это исправить?
Я уже проверил node2, и он работает нормально.


[Обновление] Я подписан на эту страницу и это работает хорошо. Но я все еще не хочу знать, как настроить рой-кластер без докер-машины.


[Обновление] Другой подход также не работает.

docker-machine create -d virtualbox \
 --swarm \
 --swarm-discovery="consul://$(docker-machine ip mh-keystore):8500" \
 --engine-opt="cluster-store=consul://$(docker-machine ip mh-keystore):8500" \
 --engine-opt="cluster-advertise=eth1:2376" \
 mhs-demo1

Информация о докере Node1 появляется по IP-адресу mhs-demo1, но информация все еще неизвестна.


[Обновление]
Когда я набираю eval docker-machine env --swarm node1, отображается

Ошибка при проверке соединения TLS: «узел 1» не является мастером роя. Флаг --swarm предназначен для использования с мастерами роя. Вызывает ли это ошибку? Почему использование инструкции диспетчера роя для настройки не является мастером роя?

Это так странно. Как я могу получить тот же результат, что и

docker-machine create \ -d virtualbox \ --swarm --swarm-master \ 
 --swarm-discovery="consul://$(docker-machine ip mh-keystore):8500" \ 
 --engine-opt="cluster-store=consul://$(docker-machine ip mh-keystore):8500" \ 
 --engine-opt="cluster-advertise=eth1:2376" \
 mhs-demo0

используя инструкции роя?

Я хочу использовать инструкцию роя, потому что я не хочу объявлять мастера роя при его создании.


person 鄭元傑    schedule 08.06.2016    source источник


Ответы (3)


Почему вы используете докер-машину только для запуска узла? Вы можете использовать докер-машину для настройки вашего узла с готовым к работе роем. Вы можете следовать этому руководству https://docs.docker.com/engine/userguide/networking/get-started-overlay/

person GianArb    schedule 08.06.2016
comment
Да. Я знаю эти методы. Но я просто хочу понять, почему другой подход не работает ....... - person 鄭元傑; 08.06.2016

Попробуйте удалить этот файл с помощью:

sudo rm /etc/docker/key.json

Затем перезапустите докер с помощью:

sudo service docker restart

В этот момент докер создаст новый файл key.json, и ваш мастер сможет найти ваших рабочих. Иногда это происходит, когда вы используете один и тот же образ для всех ваших рабочих узлов, но это легко исправить.

person Alex Cohen    schedule 15.06.2016

В докере 1.12 режим роя доступен напрямую. Нет необходимости в хранилище значений ключей для кластера.

просто следуйте этому: https://docs.docker.com/engine/swarm/swarm-tutorial/create-swarm/

person Manoj Sahu    schedule 02.01.2017