Do Windows Контейнеры поддерживают многоузловый рой - PullRequest
3 голосов
/ 03 мая 2020

У меня есть настройки docker вручную на windows сервере 2016, следуя этой статье https://docs.docker.com/ee/docker-ee/windows/docker-ee/

У меня есть две машины windows server 2016 hyper-v, использующие одно и то же сеть и я добавили правила брандмауэра, чтобы разрешить сетевое соединение друг с другом.

Первая машина содержит частный IP 192.168.192.254, а другая - частный IP 192.168.192.242, и они могут пропинговать друг друга .

Я попытался инициировать роение на первом компьютере и использовал приведенную ниже команду docker swarm init --advertise-addr 192.168.192.245:2377 --listen-addr 192.168.192.245:2377, но получил следующее сообщение об ошибке *

Ошибка ответа от демона: менеджер остановлен: сбой прослушивать удаленный адрес API: listen tcp 192.168.192.245:2377: bind: Запрошенный адрес недопустим в его контексте.

* Я выполнил приведенную ниже команду, а затем

docker network inspect nat

и ниже был результат enter image description here

Похоже, docker имеет свой собственный интерфейс, и его сетевой IP-адрес отличается от переключателя по умолчанию для hyper-v! Это означает, что оба докера на обеих машинах не знают, как общаться друг с другом, если я правильно понимаю, как я могу построить многоузловый рой в этой ситуации?

Другая вещь, которую я пытался сделать и потерпел неудачу с, чтобы инициировать рой и использовал IP-адрес в пределах диапазона docker окна, но я получил ту же проблему enter image description here

Редактировать снова:

Теперь он работал с этим IP-адресом: порт 192.168.192.243: 2377 и смог добавить первую виртуальную машину Hyper-V в качестве управляющего узла, но как вы видите, другая машина не может присоединиться к рою. Я заметил, что когда я добавляю --listen-addr 192.168.192.243:2377, я получаю ту же ошибку, что и выше.

Я также отключил брандмауэры на обеих машинах, но ничего не работает

enter image description here

1 Ответ

1 голос
/ 11 мая 2020

Вам нужно использовать один из IP-адресов хоста для listen-addr, поскольку, как следует из названия, он будет пытаться прослушивать этот IP-адрес.

Существует advertise-addr, а также это сетевой адрес объявил другим узлам (они будут использовать этот адрес для подключения к рою).

В большинстве установок они будут идентичны, но в некоторых случаях они различаются (например, хосты с multiple network cards могут хотеть, чтобы рой был доступен только в single network, или хосты, соединенные через VPN возможно, вы хотите, чтобы рой связывался только через VPN interface).
Теоретически у вас может быть менеджер роя за NAT интерфейсом, и в этом случае advertise-addr будет тем же устройством NAT (я только предположив случай NAT - я еще не пробовал).

В любом случае использование этой команды инициализации должно работать в вашем случае:
docker swarm init --advertise-addr 192.168.192.242

...