簡體   English   中英

當 mongoose 嘗試連接到在 docker 中運行的 mongodb 實例時,連接超時

[英]Connection time out when mongoose attempts to connect to a mongodb instance running in docker

我正在 Windows 機器上本地開發一個 Nodejs 應用程序。 為此,我決定在 Docker 容器中運行 Mongodb,只是為了學習如何使用 Docker。 我還在另一個容器中運行Mongo-express以管理數據庫。

問題是當我執行文件以連接到數據庫時,發生連接超時。

這是帶有數據庫代碼的文件:

let mongoose = require('mongoose');
let debug = require('debug')('s-optimizer:mongoDb')

mongoose.connect("mongodb://192.168.99.100:27017/local", {
   user: "Lab",
   pass: "123123as",
   useNewUrlParser: true,
   useUnifiedTopology: true
})
.then(() => debug("Success"))
.catch((error) => debug(error))

let db = mongoose.connection
db.on('error', () => debug("Connection Error"));
db.once('open', () => debug("Connection established"))

這是錯誤

 s-optimizer:mongoDb MongooseTimeoutError: Server selection timed out after 30000 ms
  s-optimizer:mongoDb     at new MongooseTimeoutError (C:\Users\vmari\Projects\S-optimazer\node_modules\mongoose\lib\error\timeout.js:22:11)
  s-optimizer:mongoDb     at NativeConnection.Connection.openUri (C:\Users\vmari\Projects\S-optimazer\node_modules\mongoose\lib\connection.js:763:19)
  s-optimizer:mongoDb     at Mongoose.connect (C:\Users\vmari\Projects\S-optimazer\node_modules\mongoose\lib\index.js:332:15)
  s-optimizer:mongoDb     at Object.<anonymous> (C:\Users\vmari\Projects\S-optimazer\mongo\Database.js:5:10)
  s-optimizer:mongoDb     at Module._compile (internal/modules/cjs/loader.js:959:30)
  s-optimizer:mongoDb     at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
  s-optimizer:mongoDb     at Module.load (internal/modules/cjs/loader.js:815:32)
  s-optimizer:mongoDb     at Function.Module._load (internal/modules/cjs/loader.js:727:14)
  s-optimizer:mongoDb     at Function.Module.runMain (internal/modules/cjs/loader.js:1047:10)
  s-optimizer:mongoDb     at internal/main/run_main_module.js:17:11 +0ms
  s-optimizer:mongoDb Connection Error +7ms

關於我的環境的信息

我正在使用 docker-machine 和 virtual box 在 Windows 中運行 Docker。

這是我運行時 docker-machine 的環境: docker-machine env

$Env:DOCKER_TLS_VERIFY = "1"
$Env:DOCKER_HOST = "tcp://192.168.99.100:2376"
$Env:DOCKER_CERT_PATH = "C:\Users\vmari\.docker\machine\machines\default"
$Env:DOCKER_MACHINE_NAME = "default"
$Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"

以及運行時運行的 Docker 容器: Docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
1d9788a4c5da        mongo-express       "tini -- /docker-ent…"   About an hour ago   Up About an hour    0.0.0.0:8081->8081/tcp     fervent_chebyshev      
c7bab68f0725        mongo               "docker-entrypoint.s…"   About an hour ago   Up About an hour    0.0.0.0:27017->27017/tcp   bold_noether

我必須指出,我使用docker run -it --rm -d -p 8081:8081 --link bold_noether:mongo mongo-express並且我可以在瀏覽器上訪問它: http://192.168.99.100:8081/ 但是當我嘗試通過我的代碼連接到數據庫容器時,我得到了超時。

伙計白名單您的IP然后檢查

https://github.com/docker-library/mongo/issues/177

檢查可以幫助您的線程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM