【问题标题】:Running ELK stack docker on host machine在主机上运行 ELK stack docker
【发布时间】:2023-03-14 06:12:01
【问题描述】:

我想在我的主机上的 docker 上安装 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

一切正常。有什么问题?

【问题讨论】:

    标签: docker elasticsearch networking containers kibana


    【解决方案1】:

    --net host 禁用大部分 Docker 网络堆栈。使用容器名称作为主机名在容器之间进行通信等基本功能不起作用。除非在非常不寻常的情况下,否则从不需要。

    使用标准 Docker 网络并通过主机发布选定端口的第二个设置是最佳实践。

    【讨论】:

    • 再次感谢@David Maze,你知道你的东西......当我创建网络时,我可以通过具有相同网络的docker访问。问题是我在同一台计算机上安装了 kubernetes,我希望 pod 内的容器运行 $telnet 到 logstash。问题是我的权限被拒绝,因为它的网络不同。我不明白如何让 kubernetes pod 运行 telnet 到 logstash。
    • 您可以使用 Kubernetes 向下 API 将节点的名称和/或 IP 地址获取到 pod 中,然后使用它来访问已发布的端口。更好的选择是将所有这些迁移到 Kubernetes 中运行,然后您可以使用标准的 Service 接口访问它。
    • 但是做第一个选项有多难?因为如果它不太难,它会是首选。
    • “获取节点的IP地址”是the Kubernetes downward API documentation中的具体例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2019-08-25
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多