【问题标题】:com.mongodb.MongoSocketOpenException: when connecting to mongodb docker containercom.mongodb.MongoSocketOpenException:连接到 mongodb docker 容器时
【发布时间】:2019-10-03 15:33:57
【问题描述】:

我有一个 sbt 项目,它有 mongodb 代码我正在制作这个 sbt 项目的自定义映像并使用 mongodb:2.6.11 public docker image 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 镜像的 dockerfile mongodb:2.6.11 https://github.com/ky13R/mongo-2.6.11-docker-image/blob/master/Dockerfile

这是我运行容器的方式

docker create network mynetwork

启动mongodb容器

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

【问题讨论】:

    标签: mongodb docker mongodb-java


    【解决方案1】:

    问题是您将localhost 用于db.urldb.hostname。本地主机指的是 您的 应用程序的 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

    希望我能帮上忙。

    编辑:

    解决此问题的另一种(更简单)方法是“链接”容器。这样,您无需事先创建网络。

    怎么做?

    启动你的 mongo 数据库:

    docker run -p 27017 --name mongodb mongo:2.6.11
    

    启动您的应用程序并链接到之前创建的 mongo-db 容器:

    docker run --link mongodb myproject:v1
    

    【讨论】:

    • 我遇到了同样的异常
    • 0:08:47.533 12894 [cluster-ClusterId{value='5cde882e46e0fb0062fea051', description='null'}-mongodb:27017] 集群信息 - 连接到服务器 mongodb:27017 时出现监控线程异常com.mongodb.MongoSocketException: mongodb: 名称或服务未知
    • 嗯,这是我无法回答的问题。例如,如果我启动一个 ubuntu 容器 docker run --link mongodb --rm -it ubuntu:latest bash 并执行 netcat -v mongodb 27017(使用 apt 安装后),我会得到一个连接:mongodb [172.17.0.2] 27017 (?) opennetcatjava 在容器中解析主机名的方式肯定有所不同。
    • 所以我应该在自定义镜像中安装 mongodb,而不是使用来自 docker hub 的公共镜像吗?
    • 我不认为错误来自 mongodb 图像。 Java 使用与标准 linux 工具不同的方式来解析主机名。也许您可以在 Dockerfile 中添加解决方案:stackoverflow.com/a/32550032/8745384
    猜你喜欢
    • 2017-11-10
    • 2018-01-26
    • 2016-06-13
    • 2019-02-16
    • 2019-02-24
    • 1970-01-01
    • 2017-10-03
    • 2018-01-09
    • 2019-01-12
    相关资源
    最近更新 更多