Search code examples
elasticsearchdockerdockerfiledocker-machineelasticsearch-plugin

How to use the official docker elasticsearch container?


I have the following Dockerfile:

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

I think the 3rd line is never reached.

When I try to access the dockercontainer from my local machine through: 172.17.0.2:9300

I get nothing, what am I missing? I want to access elasticsearch from the local host machine.


Solution

  • I recommend using docker-compose (which makes lot of things much easier) with following configuration.

    Configuration (for development)

    Configuration starts 3 services: elastic itself and extra utilities for development like kibana and head plugin (these could be omitted, if you don't need them).

    In the same directory you will need three files:

    • docker-compose.yml
    • elasticsearch.yml
    • kibana.yml

    With following contents:

    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
    

    Running

    With above three files in the same directory and that directory set as current working directory you do (could require sudo, depends how you have your docker-compose set up):

    docker-compose up
    

    It will start up and you will see logs from three different services: elasticsearch_540, kibana_540 and head_540.

    After initial start up you will have your elastic cluster available for http under 9200 and for tcp under 9300. Validate with following curl if the cluster started up:

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

    Then you can view and play with your cluster using either kibana (with credentials elastic / changeme):

    http://localhost:5601/
    

    or head plugin:

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