0

我可以解决这个问题,并在网上找到多人遇到同样的问题。

我一直在尝试:

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
4

2 回答 2

1

创建时需要将端口公开给 docker 容器:

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

然后你可以连接到 localhost 端口 27017

于 2017-01-24T12:22:05.567 回答
-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

容器 ID 旁边的 IP 是您要使用的 IP:

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

如果有人有更优雅的解决方案,我很想听听。例如,这个 ip 可能会改变,但根据我的经验,当容器重新启动时它不会改变。

于 2016-08-11T20:59:40.293 回答