我在Mlab上有一个数据库设置,并且有一个可以远程工作的连接字符串。如果我使用本地mongo在docker上运行我的节点应用程序,则一切正常,但是,如果我更改配置并连接到Mlab mongo,则会收到以下错误:
UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
at Pool.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:564:11)
at emitOne (events.js:116:13)
at Pool.emit (events.js:211:7)
at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:317:12)
at Object.onceWrapper (events.js:317:30)
at emitTwo (events.js:126:13)
at Connection.emit (events.js:214:7)
at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:246:50)
at Object.onceWrapper (events.js:315:30)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at emitErrorNT (internal/streams/destroy.js:66:8)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickDomainCallback (internal/process/next_tick.js:219:9)
(node:24) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 6)
除了处理Node方面的错误(我没有捕获到的错误,但这是另一个问题)之外,如何从Docker容器连接到外部mongo服务器?
我见过this,并按照此处描述的步骤进行操作,但这对我没有帮助。
有什么建议吗?
编辑
这是一个Node应用程序。在我的Dockerfile中,我具有以下设置:
ENV DB_HOST=mongodb+srv://<user>:<password>@<mlab>/<db_name>?retryWrites=true
在我设置数据库的Node应用程序中,我有以下内容:
mongoose.connect(process.env.DB_HOST, {useNewUrlParser: true, useFindAndModify: false, useCreateIndex: true});
当我在运行时打印上面的env变量时,我得到了正确的db字符串(在本地运行一切正常)。
我不明白为什么错误显示localhost。这是我第一次使用Docker。我是否需要任何其他配置,以便我的容器可以与外部服务进行通话?