2016-01-13 2 views
2

У меня есть несколько хостов, на которых работает Docker, я использую Consul в качестве хранилища ключей. Я могу создавать сети наложения, контейнеры могут видеть имя хоста и IP-адреса друг друга,/etc/hosts прекрасно обновляются, когда контейнеры создаются/уничтожаются. Тем не менее, контейнеры, которые находятся на разных хостах, не могут фактически соединяться друг с другом (те, которые находятся на одном и том же хосте).Контейнеры докеров не могут подключаться через оверлейные сети

Я держал расследование журналов и журналов демона Docker содержат эти:

[INFO] serf: EventMemberJoin: vagrant-ubuntu-trusty-64 192.168.57.103 

[ERR] memberlist: Conflicting address for vagrant-ubuntu-trusty-64. Mine: 192.168.57.103:7946 Theirs: 192.168.57.102:7946 

[ERR] serf: Node name conflicts with another node at 192.168.57.102:7946. Names must be unique! (Resolution enabled: true) 

Если демоны Docker идентифицируют себя как-то? Похоже, что Serf запутан, потому что каждый демон просто использует имя хоста в качестве идентификатора.

ответ

6

Ответ: члены кластера должны иметь уникальные имена хостов, поскольку демоны Docker идентифицируются базой по имени хоста (по умолчанию). Почему на Земле Докер оставил это из своих учебников?

+0

Не могли бы вы показать, где я могу указать имена хостов. –

+0

Вы должны установить свойство hostname при запуске контейнера ('-h' или' --hostname'). –

+0

Спасибо человеку. Вы спасли день. –

3

Проверьте имя хоста для машин, на которых работает докер. Чтобы проверить имя хоста, запустите это на терминале.

hostname 

Он должен быть разным для всех узлов.