2016-08-11 50 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