2016-12-19 4 views
4

У меня проблема, похожая на How to access externally to consul UI, но я не могу получить комбинацию сетевых параметров для правильной работы.Доступ к консулу UI работает в докере на OSX

Я нахожусь на OSX, используя Docker для Mac, а не старое оборудование докерной машины и официальное изображение докеры-консула, а не изображение прогории/докера.

Я могу запустить серверный кластер на 3-узла с помощью тонкой

docker run -d --name node1 -h node1 consul agent -server -bootstrap-expect 3 
JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)" 
docker run -d --name node2 -h node2 consul agent -server -join $JOIN_IP 
docker run -d --name node3 -h node3 consul agent -server -join $JOIN_IP 

До сих пор так хорошо, они связаны друг с другом и работает отлично. Теперь я хочу запустить агент и просматривать его через интерфейс.

Я попробовал кучу комбинаций -client и -bind, которые, похоже, являются ключом ко всему этому. Использование

docker run -d -p 8500:8500 --name node4 -h node4 consul agent -join $JOIN_IP -ui -client=0.0.0.0 -bind=127.0.0.1 

я могу получить пользовательский интерфейс с помощью http://localhost:8500/ui/, и члены Консула показывает все узлы:

docker exec -t node4 consul members 
Node Address   Status Type Build Protocol DC 
node1 172.17.0.2:8301 alive server 0.7.1 2   dc1 
node2 172.17.0.3:8301 alive server 0.7.1 2   dc1 
node3 172.17.0.4:8301 alive server 0.7.1 2   dc1 
node4 127.0.0.1:8301 alive client 0.7.1 2   dc1 

Но не все хорошо; в пользовательском интерфейсе он говорит мне node4 является «Агент не живет или недостижим» и в его журналах есть целая куча

2016/12/19 18:18:13 [ERR] memberlist: Failed to send ping: write udp 127.0.0.1:8301->172.17.0.4:8301: sendto: invalid argument 

Я перепробовал кучу других комбинаций - --net = хозяин просто borks вещи на OSX.

Если я пытаюсь -bind = внешний IP моего бокса он не запустится,

Error starting agent: Failed to start Consul client: Failed to start lan serf: Failed to create memberlist: Failed to start TCP listener. Err: listen tcp 192.168.1.5:8301: bind: cannot assign requested address 

Я также попытался отображение всех других портов, включая УДП порты (-p 8500: 8500 -p 8600: 8600 -p 8400: 8400-p 8300-8302: 8300-8302 -p 8600: 8600/udp -p 8301-8302: 8301-8302/udp), но это ничего не изменило.

Как я могу присоединиться к узлу до этого кластера и просматривать пользовательский интерфейс?

ответ

7

Попробуйте использовать выпуск консула 0.7.2 и начать работу агента с помощью следующих (бета как из 0.7.2, 0.8.0 окончательных путем) Синтаксис:

$ docker run -d -p 8500:8500 --name node4 -h node4 consul agent -join $JOIN_IP -ui -client=0.0.0.0 -bind='{{ GetPrivateIP }}'

Изменения является аргументом до -bind, где Consul теперь отобразит IP-адрес частного IP-адреса. Другие параметры шаблона задокументированы в hashicorp/go-sockaddr.

+1

Человек говорит о поздних новостях! Большое спасибо, я тестировал и отлично работает. –