Я хочу установить 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
все работает нормально. В чем проблема?


--net host отключает большую часть сетевого стека Docker. Базовые функции, такие как общение между контейнерами с использованием их имени контейнера в качестве имени хоста, не работают. За исключением очень необычных обстоятельств, в этом нет необходимости.
Ваша вторая установка, которая использует стандартную сеть Docker и публикует выбранные порты через хост, является лучшей практикой.
Вы можете использовать нисходящий API Kubernetes, чтобы получить имя узла и/или IP-адрес в модуль, а затем использовать его для доступа к опубликованным портам. Лучшим вариантом является миграция всего этого для работы в Kubernetes, а затем вы сможете получить к нему доступ с помощью стандартного интерфейса службы.
Но насколько сложно сделать первый вариант? Потому что, если это не слишком сложно, это было бы предпочтительнее.
«Получить IP-адрес узла» — это конкретный пример в документация по нисходящему API Kubernetes.
Еще раз спасибо @David Maze, вы знаете свое дело .... Когда я создаю сеть, я могу получить доступ через докеры в той же сети. Проблема в том, что у меня на том же компьютере установлен kubernetes, и я хочу, чтобы этот контейнер внутри модуля запускал $telnet для logstash. Проблема в том, что мне отказано в разрешении, потому что это разные сети. Я не понимаю, как разрешить kubernetes pod запускать telnet для logstash.