com.mongodb.MongoSocketOpenException:当连接到 mongodb docker 容器时
com.mongodb.MongoSocketOpenException: when connecting to mongodb docker container
我有一个 sbt 项目,它有 mongodb
代码我正在制作这个 sbt 项目的自定义图像并使用 mongodb:2.6.11
public docker 图像 https://hub.docker.com/_/mongo
这是我的 sbt 项目的 docker 文件
FROM hseeberger/scala-sbt:11.0.2_2.12.8_1.2.8 as stripecommon
MAINTAINER sara <sarawaheed3191@gmail.com>
WORKDIR /myproject
ADD myprojectcode .
CMD ["sbt","reload","clean","compile","run"]
这里是 mongodb 图像 mongodb:2.6.11 https://github.com/ky13R/mongo-2.6.11-docker-image/blob/master/Dockerfile
的 dockerfile
我是这样的 运行 我的容器
docker create network mynetwork
启动mongo数据库容器
docker run -p 27017 --network mynetwork mongo:2.6.11
启动我的项目容器
docker run --network mynetwork myproject:v1
我的项目无法连接到 mongodb 服务器,这里是异常日志
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.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
... 3 common frames omitted
我已经按照本教程连接到 mongodb 服务器
https://dzone.com/articles/using-docker-to-shove-an-existing-application-into
我在这里做错了什么?
连接到 mongo 服务器的代码是
private val DATABASE:String = config.getString("db.dbname")
private val SERVER:ServerAddress = {
val hostName=config.getString("db.hostname")
val port=config.getString("db.port").toInt
new ServerAddress(hostName,port)
}
val connectionMongo = MongoClient(SERVER)
log.debug("mongo connection created "+connectionMongo)
def collectionMongo(name:String) = connectionMongo(DATABASE)(name)
log.debug("getting collection from mongodb")
}
这里是配置文件
db.url="mongodb://Localhost:27017"
db.hostname="Localhost"
db.dbname=testdb
db.port=27017
问题是您将 localhost
用于 db.url
和 db.hostname
。 Localhost 指的是 你的 应用程序的 Docker 容器在容器内,而不是你的主机。您可以做的是以具体名称启动 MongoDB 容器,如下所示:
docker run -p 27017 --name mongodb --network mynetwork mongo:2.6.11
并在您的应用程序中使用以下配置:
db.url="mongodb://mongodb:27017"
db.hostname="mongodb"
db.dbname=testdb
db.port=27017
在您的 docker 网络 (mynetwork
) 中,可以通过容器名称访问数据库容器(此处 mongodb
)
希望能帮到你。
编辑:
解决此问题的另一种(更简单)方法是 "link" 容器。这样,您就无需事先创建网络。
怎么做?
启动您的 mongo 数据库:
docker run -p 27017 --name mongodb mongo:2.6.11
启动您的应用程序并link到先前创建的mongo-db容器:
docker run --link mongodb myproject:v1
我有一个 sbt 项目,它有 mongodb
代码我正在制作这个 sbt 项目的自定义图像并使用 mongodb:2.6.11
public docker 图像 https://hub.docker.com/_/mongo
这是我的 sbt 项目的 docker 文件
FROM hseeberger/scala-sbt:11.0.2_2.12.8_1.2.8 as stripecommon
MAINTAINER sara <sarawaheed3191@gmail.com>
WORKDIR /myproject
ADD myprojectcode .
CMD ["sbt","reload","clean","compile","run"]
这里是 mongodb 图像 mongodb:2.6.11 https://github.com/ky13R/mongo-2.6.11-docker-image/blob/master/Dockerfile
的dockerfile
我是这样的 运行 我的容器
docker create network mynetwork
启动mongo数据库容器
docker run -p 27017 --network mynetwork mongo:2.6.11
启动我的项目容器
docker run --network mynetwork myproject:v1
我的项目无法连接到 mongodb 服务器,这里是异常日志
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.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
... 3 common frames omitted
我已经按照本教程连接到 mongodb 服务器 https://dzone.com/articles/using-docker-to-shove-an-existing-application-into 我在这里做错了什么?
连接到 mongo 服务器的代码是
private val DATABASE:String = config.getString("db.dbname")
private val SERVER:ServerAddress = {
val hostName=config.getString("db.hostname")
val port=config.getString("db.port").toInt
new ServerAddress(hostName,port)
}
val connectionMongo = MongoClient(SERVER)
log.debug("mongo connection created "+connectionMongo)
def collectionMongo(name:String) = connectionMongo(DATABASE)(name)
log.debug("getting collection from mongodb")
}
这里是配置文件
db.url="mongodb://Localhost:27017"
db.hostname="Localhost"
db.dbname=testdb
db.port=27017
问题是您将 localhost
用于 db.url
和 db.hostname
。 Localhost 指的是 你的 应用程序的 Docker 容器在容器内,而不是你的主机。您可以做的是以具体名称启动 MongoDB 容器,如下所示:
docker run -p 27017 --name mongodb --network mynetwork mongo:2.6.11
并在您的应用程序中使用以下配置:
db.url="mongodb://mongodb:27017"
db.hostname="mongodb"
db.dbname=testdb
db.port=27017
在您的 docker 网络 (mynetwork
) 中,可以通过容器名称访问数据库容器(此处 mongodb
)
希望能帮到你。
编辑:
解决此问题的另一种(更简单)方法是 "link" 容器。这样,您就无需事先创建网络。
怎么做?
启动您的 mongo 数据库:
docker run -p 27017 --name mongodb mongo:2.6.11
启动您的应用程序并link到先前创建的mongo-db容器:
docker run --link mongodb myproject:v1