2016-10-31 28 views
10

Tôi đã cố tạo Kibana và Elasticsearch và có vẻ như Kibana đang gặp khó khăn trong việc xác định Elasticsearch.Kibana trên Docker không thể kết nối với Elasticsearch

Dưới đây là các bước của tôi:

1) Tạo mạng

docker network create mynetwork --driver=bridge 

2) Run Elasticsearch container

docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch_2_4 --network mynetwork elasticsearch:2.4 

3) Run Kibana container

docker run -i --network mynetwork -p 5601:5601 kibana:4.6 

tôi nhận được một outpu JSON khi tôi kết nối với Elasticsearch qua http://localhost:9200/ thông qua trình duyệt của tôi.

Nhưng khi tôi mở http://localhost:5601/ tôi nhận được

Unable to connect to Elasticsearch at http://elasticsearch:9200. 

cách tiếp cận thay thế,

tôi vẫn nhận được một lỗi tương tự khi tôi cố gắng

docker run -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 -p 5601:5601 kibana:4.6 

nơi tôi nhận được lỗi

Unable to connect to Elasticsearch at http://127.0.0.1:9200. 

bài viết trên blog của tôi dựa trên câu trả lời được chấp nhận: https://gunith.github.io/docker-kibana-elasticsearch/

+0

Bạn có một số lý do tại sao bạn arent sử dụng Docker soạn? – VladoDemcak

+0

Cảm ơn @VladoDemcak bình luận .. Tôi đã từng đề nghị của Andreas và đó cũng làm việc :) –

Trả lời

16

Có một số hiểu lầm về những gì localhost hoặc 127.0.0.1 có nghĩa là khi chạy một lệnh bên trong một container. Vì mỗi vùng chứa đều có mạng riêng, localhost không phải là hệ thống lưu trữ thực của bạn mà là chính vùng chứa. Vì vậy, khi bạn đang chạy kibana và trỏ biến số ELASTICSEARCH_URL đến localhost:9200 quá trình kibana sẽ tìm elasticsearch bên trong thùng chứa kibana, tất nhiên là không chạy ở đó.

Bạn đã giới thiệu một số mạng tùy chỉnh mà bạn đã tham chiếu khi bắt đầu vùng chứa. Tất cả các thùng chứa đang chạy trong cùng một mạng có thể tham chiếu lẫn nhau qua tên trên các cổng expose d của chúng (xem Dockerfiles). Khi bạn đặt tên cho container elasticsearch của mình là elasticsearch_2_4, bạn có thể tham chiếu điểm cuối http của elasticsearch là http://elasticsearch_2_4:9200.

docker run -d --network mynetwork -e ELASTICSEARCH_URL=http://elasticsearch_2_4:9200 -p 5601:5601 kibana:4.6 

Miễn là bạn không cần truy cập trực tiếp vào cá thể elasticsearch, bạn thậm chí có thể bỏ qua ánh xạ cổng 9200 và 9300 cho máy chủ của mình.

Thay vì tự khởi động tất cả các vùng chứa, tôi cũng khuyên bạn nên sử dụng docker-compose để quản lý tất cả các dịch vụ và thông số. Bạn cũng nên cân nhắc việc gắn một thư mục cục bộ dưới dạng ổ đĩa để có dữ liệu được duy trì.Đây có thể là tệp soạn thư của bạn. Thêm networks, nếu bạn cần có mạng bên ngoài, nếu không thiết lập này chỉ tạo mạng cho bạn.

version: "2" 

services: 

    elasticsearch: 
    image: elasticsearch:2.4 
    ports: 
     - "9200:9200" 
    volumes: 
     - ./esdata/:/usr/share/elasticsearch/data/ 

    kibana: 
    image: kibana:4.6 
    ports: 
     - "5601:5601" 
    environment: 
     - ELASTICSEARCH_URL=http://elasticsearch:9200 
+0

để có thêm sự rõ ràng, tạo một 'docker-compose.yml 'tệp với đoạn mã trình soạn thảo docker ở cuối câu trả lời, sau đó chạy' docker-compose up' để đứng lên ngăn xếp. – scald

1

Test:

docker run -d -e ELASTICSEARCH_URL=http://yourhostip:9200 -p 5601:5601 kibana:4.6 

Bạn có thể thử nghiệm với ip máy chủ của bạn hoặc ip xác định bởi docker0 trong ifconfig

Trân

+0

Cảm ơn đã phản ứng Carlos, Câu trả lời được chấp nhận làm việc theo đề nghị của @Andreas .. Vì vậy, giải pháp là: '' ' docker chạy -d --network mynetwork -e ELASTICSEARCH_URL = http: // elasticsearch_2_4: 9200 -p 5601: 5601 --name kibana_4_6 kibana: 4.6 ' '' –

0

tôi đã thay đổi cấu hình mạng cho Kibana container và sau này nó hoạt động tốt:

Kitematic Kibana Settings[1]

Các vấn đề liên quan