2017-11-22 21 views
4

나는 docker에서 aerospike server를 실행 중입니다.호스트 Docker Aerospike에 연결할 수 없습니다.

$ docker run -d --name aerospike aerospike/aerospike-server 
0ad3b2df67bd17f896e87ed119758d9af7fcdd9b82a8632828e01072e2c5673f 

성공적으로 시작되었습니다.

$docker ps 
CONTAINER ID  IMAGE      COMMAND     
CREATED    STATUS    PORTS    NAMES 
0ad3b2df67bd  aerospike/aerospike-server "/entrypoint.sh asd"  
4 seconds ago  Up 2 seconds  3000-3003/tcp  aerospike 

다음 명령을 사용하여 도커의 IP 주소를 찾았습니다.

$ docker inspect -f '{{.NetworkSettings.IPAddress }}' aerospike 
172.17.0.2 

아래 명령을 사용하여 aql에 연결하려고하면 성공적입니다.

$ docker run -it aerospike/aerospike-tools aql -h $(docker inspect -f 
'{{.NetworkSettings.IPAddress }}' aerospike) 
Aerospike Query Client 
Version 3.15.0.3 
C Client Version 4.2.0 
Copyright 2012-2017 Aerospike. All rights reserved. 
aql> select * from test.person 
0 rows in set (0.002 secs) 

이제 호스트 컴퓨터의 Java 클라이언트를 사용하여 도커의 aerospike 서버에 연결하려고합니다. 나는 모두가 AerospikeClient("172.17.0.2", 3000)AerospikeClient("localhost", 3000) 나는 Dockerfile에서 볼

포트 3000이 노출 시도했습니다

objc[3446]: Class JavaLaunchHelper is implemented in both 
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/java (0x10f7b14c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10f8794e0). One of the two will be used. Which one is undefined. 
Exception in thread "main" com.aerospike.client.AerospikeException$Connection: 
Error Code 11: Failed to connect to host(s): 172.17.0.2 3000 Error Code 11: java.net.SocketTimeoutException: connect timed out 

at com.aerospike.client.cluster.Cluster.seedNodes(Cluster.java:413) 
at com.aerospike.client.cluster.Cluster.tend(Cluster.java:306) 
at com.aerospike.client.cluster.Cluster.waitTillStabilized(Cluster.java:271) 
at com.aerospike.client.cluster.Cluster.initTendThread(Cluster.java:181) 
at com.aerospike.client.AerospikeClient.<init>(AerospikeClient.java:210) 
at com.aerospike.client.AerospikeClient.<init>(AerospikeClient.java:151) 
at com.demo.aerospike.AerospikeDemo.main(AerospikeDemo.java:12) 

- 내가 위 프로그램을 실행하면

public class AerospikeDemo { 
    public static void main(String []args) { 

     AerospikeClient client = new AerospikeClient("172.17.0.2", 3000); 
     Key key = new Key("test", "demo", "putgetkey"); 
     //Key key2 = new Key("1", "2", "3"); 
     Bin bin1 = new Bin("bin1", "value1"); 
     Bin bin2 = new Bin("bin2", "value2"); 
     Bin bin3 = new Bin("bin2", "value3"); 

     // Write a record 
     client.put(null, key, bin1, bin2, bin3); 

     // Read a record 
     Record record = client.get(null, key); 

     System.out.println("record is "+ record); 
     System.out.println("record bins is " + record.bins); 

     client.close(); 
     } 
    } 

, 나는 오류가 아래에 받고 있어요 호스트에게하지만 나는 왜 docker에서 aerospike 서버를 사용할 수 없는지 잘 모르겠습니다.

답변

4

IP 172.17.0.2은 Docker에서만 액세스 할 수 있으므로 (다른 컨테이너를 사용하여 연결할 수 있음) 호스트에서 연결하려면 각 포트를 매핑해야합니다. 이후

docker run -d --name aerospike -p 3000:3000 aerospike/aerospike-server 

당신은 사용할 수 있습니다

AerospikeClient client = new AerospikeClient("localhost", 3000);