将普通Scala客户端连接到基本docker MongoDB 4.1.1容器?
我按照上的说明创建了一个MongoDB docker容器,如下所示:将普通Scala客户端连接到基本docker MongoDB 4.1.1容器?,mongodb,scala,docker,mongodb-scala,Mongodb,Scala,Docker,Mongodb Scala,我按照上的说明创建了一个MongoDB docker容器,如下所示: $ docker run --name mongo -d mongo:4.0-xenial 接下来,我发现了IP地址: $ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongo 172.17.0.2 然后,按照官方的MongoDB“”(说它是版本2.9;我使用的是“mongo-scala-driver_2.13”,
$ docker run --name mongo -d mongo:4.0-xenial
接下来,我发现了IP地址:
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongo
172.17.0.2
然后,按照官方的MongoDB“”(说它是版本2.9;我使用的是“mongo-scala-driver_2.13”,版本4.1.1,找不到更新的版本;也许这就是问题所在(它改变了那么多吗?),但即使如此,仍然不确定要去哪里:
结果如何
2020-10-25 13:48:45 INFO cluster:71 - No server chosen by WritableServerSelector from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, serverDescriptions=[ServerDescription{address=172.17.0.2:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
Exception in thread "main" java.util.concurrent.TimeoutException: Future timed out after [35 seconds]
at scala.concurrent.impl.Promise$DefaultPromise.tryAwait0(Promise.scala:212)
at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:225)
at scala.concurrent.Await$.$anonfun$result$1(package.scala:201)
at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:62)
at scala.concurrent.Await$.result(package.scala:124)
at demo.Mongo$.delayedEndpoint$com$uplift$cleanup$Mongo$1(Mongo.scala:20)
这表明问题可能在于“mongod”不接受来自外部主机的连接,但当我将外壳放入容器时,我看到:
# ps uax
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mongodb 1 0.4 3.9 1110640 80808 ? Ssl 18:38 0:26 mongod --bind_ip_all
。。。这似乎表明它应该允许所有IPV4地址的连接
似乎这应该是一个非常常见的用例(考虑到我认为我遵循了所有的“基本”/“官方”说明);我感到困惑的是,这是如此复杂,试图解决。首先是更新的文档。第二,您可以使用shell或其他类似python的驱动程序连接到该容器吗?要确定问题出在代码上,而不是infra。第三,您确定容器的端口已暴露吗?通常,在启动容器时,您会添加如下内容-p 27017:27017
。
# ps uax
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mongodb 1 0.4 3.9 1110640 80808 ? Ssl 18:38 0:26 mongod --bind_ip_all