2016-08-11 73 views
0

我可以通过这个问题,并发现在同一问题的在线多人。无法连接到使用MongoJavaDriver的MongoDB容器

我一直在努力:

new MongoClient(new ServerAddress("0.0.0.0", 27017), mongoClientBuilder.build());

我也试过"localhost""127.0.0.1"没有运气。 问题提出了网上有相同的堆栈跟踪:

INFO: Exception in monitor thread while connecting to server localhost:27017 
com.mongodb.MongoSocketOpenException: Exception opening socket 
    at com.mongodb.connection.SocketStream.open(SocketStream.java:63) 
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.net.ConnectException: Connection refused 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) 
    at com.mongodb.connection.SocketStream.open(SocketStream.java:58) 
    ... 3 more 

回答

-1

首先,你需要容器​​ID:

docker ps

你需要获得容器中的特定IP:

$ docker exec -it ${container_id} bash

这将在您的容器中打开一个终端会话。接着(在集装箱码头)运行:

$ cat /etc/hosts

这将打印出宿主,包括其中名称是容器ID的前几个字符的条目。

输出会是这个样子:

127.0.0.1 localhost 
... 
... 
172.17.0.2 container_id 

的IP旁边的容器的id是您要使用什么:

new MongoClient(new ServerAddress("172.17.0.2", 27017), mongoClientBuilder.build());

如果任何人有一个更优雅的解决方案,我会有兴趣听到它。例如,这个IP可能会改变,虽然根据我的经验,当容器重新启动时不会。

1

您需要在创建它的端口暴露在泊坞窗容器:

docker pull mongo 
docker run --name mongo -d -p 27017:27017 mongo 

,然后就可以连接到本地主机端口27017