如何使用官方的 docker elasticsearch 容器?

Posted

技术标签:

【中文标题】如何使用官方的 docker elasticsearch 容器?【英文标题】:How to use the official docker elasticsearch container? 【发布时间】:2017-10-15 14:31:27 【问题描述】:

我有以下 Dockerfile:

FROM docker.elastic.co/elasticsearch/elasticsearch:5.4.0
RUN elasticsearch
EXPOSE 80

我认为第 3 行永远达不到。

当我尝试通过以下方式从本地计算机访问 dockercontainer 时: 172.17.0.2:9300

我什么也得不到,我错过了什么?我想从本地主机访问elasticsearch。

【问题讨论】:

你应该阅读hub.docker.com/_/elasticsearch运行容器部分 那个已经被弃用了,看看here吧 @user2915097,所以我运行 `docker run -d elasticsearch`,然后转到 172.17.0.2:9300 我仍然没有得到任何输出 您使用的是 Linux、Mac 还是 Windows? 按照documentation公开端口9200,9300 【参考方案1】:

我建议使用 docker-compose(它使很多事情变得更容易)和以下配置。

配置(用于开发)

配置启动 3 个服务:弹性本身和额外的实用程序 用于 kibana 和 head 插件等开发(如果不需要,可以省略它们)。

在同一目录中,您将需要三个文件:

docker-compose.yml elasticsearch.yml kibana.yml

内容如下:

docker-compose.yml

version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.0
    container_name: elasticsearch_540
    environment:
      - http.host=0.0.0.0
      - transport.host=0.0.0.0
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    volumes:
      - esdata:/usr/share/elasticsearch/data
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9200:9200
      - 9300:9300
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    mem_limit: 2g
    cap_add:
      - IPC_LOCK
  kibana:
    image: docker.elastic.co/kibana/kibana:5.4.0
    container_name: kibana_540
    environment:
      - SERVER_HOST=0.0.0.0
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - 5601:5601
  headPlugin:
    image: mobz/elasticsearch-head:5
    container_name: head_540
    ports:
      - 9100:9100

volumes:
  esdata:
    driver: local

elasticsearch.yml

cluster.name: "chimeo-docker-cluster"
node.name: "chimeo-docker-single-node"
network.host: 0.0.0.0

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"

kibana.yml

server.name: kibana
server.host: "0"
elasticsearch.url: http://elasticsearch:9200
elasticsearch.username: elastic
elasticsearch.password: changeme
xpack.monitoring.ui.container.elasticsearch.enabled: true

跑步

将以上三个文件放在同一个目录中,并且将该目录设置为当前工作目录(可能需要 sudo,取决于您如何设置 docker-compose):

docker-compose up

它将启动,您将看到来自三个不同服务的日志:elasticsearch_540kibana_540head_540

初始启动后,您的弹性集群将可用于 9200 下的 http 和 9300 下的 tcp。如果集群已启动,请使用以下 curl 进行验证:

curl -u elastic:changeme http://localhost:9200/_cat/health 

然后您可以使用任一 kibana(使用凭据弹性/changeme)查看和使用您的集群:

http://localhost:5601/

或头插件:

http://localhost:9100/?base_uri=http://localhost:9200&auth_user=elastic&auth_password=changeme

【讨论】:

非常感谢 slawek 编写了如此完整的指南,我会努力让它稍后运行 谢谢(&抱歉迟到的答案)它在http://localhost:9100/工作,所以如果我想在弹性搜索容器中放入一些信息,我该如何继续,任何指针表示赞赏 我建议从here开始。请记住,所有 REST 调用都必须像运行状况检查 curl -u elastic:changeme http://localhost:9200/_cat/health 一样使用凭据和端口 9200 运行(如果您没有更改默认值)。因此创建索引将是curl -u elastic:changeme -XPUT http://localhost:9200/customer 和索引文档curl -u elastic:changeme -XPUT 'localhost:9200/customer/external/1?pretty' -H 'Content-Type: application/json' -d ' "name": "John Doe" ' 使用 Head 插件时,Elastic 搜索节点不显示。我可以从 Kibana 看到它。另外,如果我想向集群添加多个节点,我应该只在 docker compose 中复制 elasticsearch 服务吗? 很奇怪。您确定您没有更改默认密码吗?还是来自 elasticsearch.yml 的 http.cors 设置?也许 mobz/elasticsearch-head:5 在此期间发生了变化。不确定,因为在我的机器上撰写仍然有效。至于多节点设置,我没有玩过,但在 elasticsearch docs 中有一个示例设置。所以类似的东西应该有效。他们使用单播将第二个节点指向第一个节点。【参考方案2】:

由于虚拟内存不足,您的容器将自动退出,默认情况下运行弹性搜索容器,您的内存应该是 262144 的最小值,但如果您运行此命令 sysctl vm.max_map_count 并看到它将在 65530 左右。请通过使用此命令sysctl -w vm.max_map_count=262144 增加您的虚拟内存数量并再次运行容器docker run IMAGE ID然后您应该让您的容器运行并且您应该能够在端口 9200 或 9300 访问弹性搜索

编辑:检查此链接https://www.elastic.co/guide/en/elasticsearch/reference/5.0/vm-max-map-count.html#vm-max-map-count

【讨论】:

【参考方案3】:

最好遵循官方的 elasticsearch 文档,该文档在 single node elasticsearch cluster 上有一个很好的部分,同时运行 multi-node elasticsearch cluster using docker-compose。

请参考版本特定文档,可以在elasticsearch官方文档中的版本下拉菜单中访问。

【讨论】:

以上是关于如何使用官方的 docker elasticsearch 容器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用官方的 docker elasticsearch 容器?

如何使用官方 PHP Docker 镜像方法安装 php-redis 扩展?

如何使用Docker将NodeJS应用程序与cron作业进行容器化?

如何在官方 docker php 映像上以非 root 用户身份运行 composer

如何使用官方Tensorflow docker容器在主机目录中保存和编辑Jupyter笔记本?

如何在 docker 的官方 php-fpm-alpine 镜像上安装 XDebug?