2015-05-14 22 views
7

Tôi thiết lập một thùng chứa elasticsearch với hình ảnh docker REPIC elasticsearch CHÍNH THỨC. Sau đó, chạy nó vớiKhông thể kết nối với elasticsearch được Dockerized qua java-client

docker run -dP elasticsearch 

Dễ dàng và hiệu quả. Thông báo thông tin ps là

CONTAINER ID  IMAGE     COMMAND    CREATED    STATUS    PORTS            NAMES 
658b49ed9551  elasticsearch:latest "/docker-entrypoint. 2 seconds ago  Up 1 seconds  0.0.0.0:32769->9200/tcp, 0.0.0.0:32768->9300/tcp suspicious_albattani 

Và tôi có thể truy cập vào máy chủ bằng http-client thông qua cổng 32769-> 9200

baihetekiMacBook-Pro:0 baihe$ curl 10.211.55.100:32769 
{ 
    "status" : 200, 
    "name" : "Scorpia", 
    "cluster_name" : "elasticsearch", 
    "version" : { 
    "number" : "1.4.5", 
    "build_hash" : "2aaf797f2a571dcb779a3b61180afe8390ab61f9", 
    "build_timestamp" : "2015-04-27T08:06:06Z", 
    "build_snapshot" : false, 
    "lucene_version" : "4.10.4" 
    }, 
    "tagline" : "You Know, for Search" 
} 

Bây giờ tôi cần JAVA-chương trình của tôi để làm việc với các elasticsearch dockerized. Trình khách java Node chỉ có thể kết nối với elasticsearch qua 32768-> 9300 (cổng nói chuyện nút cụm). Vì vậy, tôi cấu hình các khách hàng vận chuyển trong java của tôi như thế này

Settings settings = ImmutableSettings.settingsBuilder() 
      .put("client.transport.sniff", true) 
      .put("client.transport.ignore_cluster_name", true).build(); 
    client = new TransportClient(settings); 
    ((TransportClient) client) 
    .addTransportAddress(new InetSocketTransportAddress(
      "10.211.55.100", 32768)); 

Sau đó, tôi nhận được lỗi sau đây trong giao diện điều khiển:

Caused by: org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [] 
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305) 
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200) 
    at org.elasticsearch.client.transport.support.InternalTransportIndicesAdminClient.execute(InternalTransportIndicesAdminClient.java:86) 
    at org.elasticsearch.client.support.AbstractIndicesAdminClient.exists(AbstractIndicesAdminClient.java:170) 
    at org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequestBuilder.doExecute(IndicesExistsRequestBuilder.java:53) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65) 
    at cct.bigdata.yellowbook.service.impl.ResourceServiceImpl.<init>(ResourceServiceImpl.java:49) 
    at cct.bigdata.yellowbook.config.YellowBookConfig.resourceService(YellowBookConfig.java:21) 
    at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e.CGLIB$resourceService$0(<generated>) 
    at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e$$FastClassBySpringCGLIB$$72e3e213.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:312) 
    at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e.resourceService(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166) 
    ... 31 common frames omitted 

Khi tôi chạy elasticsearch trực tiếp tại máy chủ. mọi thứ đều ổn.

Tôi kiểm tra tất cả dockerfile của elasticsearch trên hub docker. Có vẻ như tất cả chúng chỉ đơn giản là làm theo các bước sau:

EXPOSE 9200 9300 

Tôi tự hỏi có ai đó đã cố gắng làm những việc tương tự. 9300 là cổng TCP thông thường hay cổng UDP? Tôi có cần phải làm một số điều đặc biệt để làm cho nó khi chạy container? Cảm ơn!

Trả lời

1

này làm việc cho tôi (trong Docker-compose.yml).

version: "2" 
services: 
    elasticsearch5: 
     image: docker.elastic.co/elasticsearch/elasticsearch:5.5.3 
     container_name: elasticsearch5 
     environment: 
      - cluster.name=elasticsearch5-cluster 
      - http.host=0.0.0.0 
      - network.publish_host=127.0.0.1 
      - transport.tcp.port=9700 
      - discovery.type=single-node 
      - xpack.security.enabled=false 
     ports: 
      - "9600:9200" 
      - "9700:9700" 

Xác định network.publish_host và transport.tcp.port dường như làm các trick. Và sniff = true vẫn hoạt động.

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