Невозможно подключиться к контейнеру 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 может измениться, хотя, по моему опыту, он не меняется при перезапуске контейнера.

Другие вопросы по тегам