Запуск докера стека ELK на хост-компьютере

Я хочу установить elasticsearch и kibana на докеры на моем хост-компьютере:

    $sudo docker run -dit --name elasticsearch -h elasticsearch --net host -p 9200:9200 -p 9300:9300 -v $(pwd)/elasticsearch/data/:/usr/share/elasticsearch/data/ -e "discovery.type=single-node" elasticsearch:6.6.1
WARNING: Published ports are discarded when using host network mode


    $sudo docker run -dit --name kibana -h kibana --net host -p 5601:5601 kibana:6.6.1
WARNING: Published ports are discarded when using host network mode

и я получаю следующие ошибки на kibana:

 log   [14:32:26.655] [warning][admin][elasticsearch] Unable to revive connection: http://elasticsearch:9200/
 log   [14:32:26.656] [warning][admin][elasticsearch] No living connections

Но если я не использую хост-машину:

sudo docker network create mynetwork
sudo docker run -dit --name elasticsearch -h elasticsearch --net mynetwork -p 9200:9200 -p 9300:9300 -v $(pwd)/elasticsearch/data/:/usr/share/elasticsearch/data/ -e "discovery.type=single-node" elasticsearch:6.6.1
sudo docker run -dit --name kibana -h kibana --net mynetwork -p 5601:5601 kibana:6.6.1

все работает нормально. В чем проблема?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
111
1

Ответы 1

--net host отключает большую часть сетевого стека Docker. Базовые функции, такие как общение между контейнерами с использованием их имени контейнера в качестве имени хоста, не работают. За исключением очень необычных обстоятельств, в этом нет необходимости.

Ваша вторая установка, которая использует стандартную сеть Docker и публикует выбранные порты через хост, является лучшей практикой.

Еще раз спасибо @David Maze, вы знаете свое дело .... Когда я создаю сеть, я могу получить доступ через докеры в той же сети. Проблема в том, что у меня на том же компьютере установлен kubernetes, и я хочу, чтобы этот контейнер внутри модуля запускал $telnet для logstash. Проблема в том, что мне отказано в разрешении, потому что это разные сети. Я не понимаю, как разрешить kubernetes pod запускать telnet для logstash.

Yagel 28.02.2019 15:54

Вы можете использовать нисходящий API Kubernetes, чтобы получить имя узла и/или IP-адрес в модуль, а затем использовать его для доступа к опубликованным портам. Лучшим вариантом является миграция всего этого для работы в Kubernetes, а затем вы сможете получить к нему доступ с помощью стандартного интерфейса службы.

David Maze 28.02.2019 16:16

Но насколько сложно сделать первый вариант? Потому что, если это не слишком сложно, это было бы предпочтительнее.

Yagel 28.02.2019 16:25

«Получить IP-адрес узла» — это конкретный пример в документация по нисходящему API Kubernetes.

David Maze 28.02.2019 16:27

Другие вопросы по теме