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:
- 获取ES容器的内网IP:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myes
- 将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
相关产品推荐
相关产品推荐

