elasticsearch Elasticsearch 5.1和Docker-如何正确配置网络以从主机访问Elasticsearch
使用Docker public repo中的Elasticsearch:latest(v5.1),我创建了自己的包含大脑的图像。我现在正在尝试正确配置Elasticsearch网络,以便我可以从大脑连接到Elasticsearch。在我创建的容器内运行的Cerbero在我的主机上正确渲染: 提交映像后,我使用以下内容创建了Docker容器:elasticsearch Elasticsearch 5.1和Docker-如何正确配置网络以从主机访问Elasticsearch,elasticsearch,docker,elasticsearch,Docker,使用Docker public repo中的Elasticsearch:latest(v5.1),我创建了自己的包含大脑的图像。我现在正在尝试正确配置Elasticsearch网络,以便我可以从大脑连接到Elasticsearch。在我创建的容器内运行的Cerbero在我的主机上正确渲染: 提交映像后,我使用以下内容创建了Docker容器: sudo docker run -d -it --privileged --name es5.1 --restart=always \ -p 9200:92
sudo docker run -d -it --privileged --name es5.1 --restart=always \
-p 9200:9200 \
-p 9300:9300 \
-p 9000:9000 \
-v ~/elasticsearch/5.1/config:/usr/share/elasticsearch/config \
-v ~/elasticsearch/5.1/data:/usr/share/elasticsearch/data \
-v ~/elasticsearch/5.1/cerebro/conf:/root/cerebro-0.4.2/conf \
elasticsearch_cerebro:5.1 \
/root/cerebro-0.4.2/bin/cerebro
~/elasticsearch/5.1/config中的my elasticsearch.yml当前指定了以下网络和发现条目:
network.publish_host: 192.168.1.26
discovery.zen.ping.unicast.hosts: ["192.168.1.26:9300"]
我还尝试了0.0.0.0,但没有为这些设置指定默认为环回的值。此外,我还尝试使用一组值指定network.host。无论我如何设置,elasticsearch都会在启动时记录:
[info] play.api.Play - Application started (Prod)
[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
[error] p.c.s.n.PlayDefaultUpstreamHandler - Cannot invoke the action
java.net.ConnectException: Connection refused: localhost/127.0.0.1:9200
… cascading errors because of this connection refusal...
无论我如何设置elasticsearch.yml networking,elasticsearch启动时的错误消息都不会更改。我验证了elasticsearch.yml正在Docker容器内提取。请让我知道我的配置是否出错 经过几天的斗争,我似乎在回答我自己的问题!问题是elasticsearch没有在容器内部启动。为了确定这一点,我在容器中安装了一个终端:
docker exec -it es5.1 bash
进入容器后,我检查了服务状态:
service elasticsearch status
对此,操作系统的回应是:
[失败]elasticsearch未运行…失败
我从以下几点开始:
service elasticsearch start
我添加了一个脚本,我将从docker run调用它来启动elasticsearch和Cerbero,这应该可以实现。但是,我仍然想知道是否有更好的方法来配置它。我制作了一个github docker compose repo,它将启动elasticsearch、kibana、logstash和Cerbero集群 ======================================================================== 另一方面,关于实际问题(弹性搜索不工作) 要使elasticsearch和大脑在一个docker容器中工作,需要使用主管
将更新更多详细信息根本不需要使用supervisor。解决此问题的一个非常简单的方法是使用docker compose并将Elasticsearch和Cerbero捆绑在一起,如下所示: docker-compose.yml:
version: '2'
services:
elasticsearch:
build: elasticsearch
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./elasticsearch/data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx1500m -Xms1500m"
networks:
- elk
cerebro:
build: cerebro
volumes:
- ./cerebro/config/application.conf:/opt/cerebro/conf/application.conf
ports:
- "9000:9000"
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
elasticsearch/Dockerfile:
FROM docker.elastic.co/elasticsearch/elasticsearch:5.5.1
FROM yannart/cerebro
大脑/Dockerfile:
FROM docker.elastic.co/elasticsearch/elasticsearch:5.5.1
FROM yannart/cerebro
然后运行
docker compose build
和docker compose up
。当一切开始时,您可以访问ES at和Cerbero at您肯定不希望服务在docker容器中运行。您确实希望Elasticsearch进程作为唯一的进程在foregraound中运行。服务和cron作业不会运行在容器内。谢谢。我想你已经意识到了这个问题,我正在尝试在容器中运行ES作为服务。谢谢你,Shuliyey!这正是我需要的。