簡體   English   中英

無法從主機上的貓鼬連接到mongodb docker容器

[英]Failed to connect to a mongodb docker container from mongoose on host

我正在嘗試使用mongoose從主機上運行的應用程序連接到docker中運行的mongodb,但失敗了。

我不能將端口27017用於新的mongodb容器,因為它已被其他容器使用。 因此,我按照此處的指南使用compose進行了設置。

以下是摘要:

docker-compose.yml

version: '3'

services:

  db:
    image: mongo:latest
    restart: always
    ports:
      - '8081:8081'
    environment:
      MONGO_INITDB_ROOT_USERNAME: root1
      MONGO_INITDB_ROOT_PASSWORD: password1

但是當我執行docker-ps ,端口27017仍然存在,但是我不確定這是否會引起問題。

PORTS
0.0.0.0:8081->8081/tcp, 27017/tcp

然后,我在admin數據庫中創建了一個新用戶。

use admin
db.createUser(
  {
    user: "admin1",
    pwd: "password2",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

server.js

const connectOption = {
  useNewUrlParser: true,
  user: 'admin1',
  pass: 'password2',
  authSource: 'admin',
}
const mongoURL = 'mongodb://localhost:8081/app1';

mongoose.connect(mongoURL, connectOption)
  .then(() => console.log('MongoDB Connected'))
  .catch(error => console.log(error));  

我收到的錯誤是

{ 
  MongoNetworkError: failed to connect to server [localhost:8081] on first connect [MongoNetworkError: write EPIPE]
...
...
...
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} 
}

假設您將nodejs應用程序作為docker-compose服務運行,則在db service中刪除ports部分(包括- '8081:8081'行)。 server.js ,更改const mongoURL = 'mongodb://localhost:8081/app1'; const mongoURL = 'mongodb://db:27017/app1';

如果要從主機訪問數據庫,請將端口8081:8081更改為<give-a-port-number>:27017

暫無
暫無

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

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