Невозможно подключиться к контейнеру mongodb с помощью MongoJavaDriver
Я мог справиться с этой проблемой и нашел несколько человек в сети с одной и той же проблемой.
Я пытался:
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
2 ответа
Вам необходимо открыть порт для контейнера Docker при его создании:
docker pull mongo
docker run --name mongo -d -p 27017:27017 mongo
а затем вы можете подключиться к локальному порту 27017
Сначала вам нужен идентификатор контейнера:
docker ps
Вам нужно получить конкретный ip для контейнера:
$ docker exec -it ${container_id} bash
Это откроет сеанс терминала в вашем контейнере. Следующий прогон (в контейнерном терминале):
$ cat /etc/hosts
Это распечатает хосты, включая запись, где имя - это первые несколько символов идентификатора контейнера.
Вывод будет выглядеть примерно так:
127.0.0.1 localhost
...
...
172.17.0.2 container_id
IP рядом с вашим идентификатором контейнера - это то, что вы хотите использовать:
new MongoClient(new ServerAddress("172.17.0.2", 27017), mongoClientBuilder.build());
Если у кого-то есть более элегантное решение, мне было бы интересно его услышать. Например, этот ip может измениться, хотя, по моему опыту, он не меняется при перезапуске контейнера.