You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器名称无法解析,Elasticsearch与Kibana组网问题求助

解决Docker容器间DNS解析及Kibana连接Elasticsearch问题

问题分析

  • 宿主机无法通过myes:9200访问Elasticsearch是正常行为:Docker不会将容器名注册到宿主机的DNS系统,仅同一自定义网络内的容器之间才能通过容器名互相解析。
  • 你的Kibana启动命令存在明显错误:环境变量使用了中文双引号,这会导致Docker无法正确解析ELASTICSEARCH_HOSTS参数,进而引发DNS解析失败。
  • 若尝试用localhost:9200或宿主机内网IP失败,是因为你启动Elasticsearch时绑定了127.0.0.1:9200,这意味着宿主机仅在本地回环地址监听9200端口,容器内部访问宿主机内网IP的9200会被拒绝。

解决方案

1. 修正Kibana启动命令(核心步骤)

将中文引号替换为英文双引号,确保Docker正确识别环境变量:

docker run --name mykib --net esnetwork -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://myes:9200" docker.elastic.co/kibana/kibana:7.9.3

2. 确保Elasticsearch容器正常运行

先检查ES容器状态,确认它已启动并加入esnetwork网络:

docker ps
docker inspect myes | grep -A5 "Networks"

若ES容器未正常启动,先重启或重新创建:

docker restart myes
# 若仍有问题,重新创建ES容器(注意保留数据,若有需要)
docker rm -f myes
docker run --name myes --net esnetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.9.3

这里去掉了127.0.0.1绑定,让宿主机所有IP都能监听9200,同时不影响容器间用myes:9200通信。

3. 验证容器间DNS解析

可以启动一个临时容器加入esnetwork网络,测试能否解析myes:

docker run --rm --net esnetwork busybox ping -c 3 myes

如果能ping通,说明Docker DNS工作正常,Kibana应该能正常连接ES。

4. 备选方案:使用容器IP连接

如果容器名解析仍有问题,可以直接用Elasticsearch容器的内网IP:

  1. 获取ES容器的内网IP:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myes
  1. 将Kibana启动命令中的myes替换为该IP:
docker run --name mykib --net esnetwork -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://<ES容器IP>:9200" docker.elastic.co/kibana/kibana:7.9.3

内容的提问来源于stack exchange,提问作者Bill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:05:23