Mongo db - 来自 Docker 中另一个容器的连接异常

Mongo db - connection exception from another container in Docker

在 Jenkins 中,我试图在 docker 容器中 运行 我的后端服务,它依赖于 Mongo 数据库。

目前我是这样的:

 stage('Backend clone and build') {
                          steps { git ([url : 'https://github...', branch : 'develop', credentialsId : '***'])

                                 sh 'docker pull mongo'
                                 sh 'docker run -d -p 27017:27017 --name mongodb mongo'

                                 sh 'docker build -t myimage2 .'
                                 sh 'docker run myimage2'
                                                         }
                }

在我 运行 构建之后,我有这个异常:

com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.1.2.jar!/:na]
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143) ~[mongodb-driver-core-4.1.2.jar!/:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188) ~[mongodb-driver-core-4.1.2.jar!/:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.1.2.jar!/:na]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.net.ConnectException: Connection refused (Connection refused)

我尝试 link 容器与 mongodb 容器作为:sh 'docker run --link mongodb:27017 myimage2',但没有成功。

我还想通过 mongodb://localhost:27017 定义主机,但 docker 不接受此命令。我没有找到任何解决方案来消除该异常。

如果我更深入地研究那个异常,我还发现了这个:

Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused (Connection refused)}}]; nested exception is com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. 

所以由于某种原因它无法连接到 localhost:27017,其中 mongodb 应该是 运行ning。

为了帮助可能遇到同样问题的其他人,您有 2 个选项可以正确设置:

  1. 创建一个docker网络,并启动这个网络上的所有容器,使容器之间可以相互发现,默认是bridge网络类型。在这种情况下,容器与主机网络接口隔离,无法通过 "localhost".

    访问
  2. 如果您希望容器 运行 在主机网络上并可通过主机网络接口 localhost 或主机 IP 访问,请按 docker 在此处的官方文档中建议:https://docs.docker.com/network/host/