【问题标题】:Failed to connect to a mongodb docker container from mongoose on host无法从主机上的 mongoose 连接到 mongodb docker 容器
【发布时间】:2019-08-13 14:37:39
【问题描述】:

我正在尝试使用 mongoose 从在主机上运行的应用程序连接到在 docker 中运行的 mongodb,但它失败了。

我不能将端口27017 用于新的 mongodb 容器,因为它已被其他容器使用。所以我按照这里的指南使用compose进行设置。

下面是sn-ps:

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)]: {} 
}

【问题讨论】:

    标签: mongodb docker mongoose docker-compose


    【解决方案1】:

    假设您将 nodejs 应用程序作为 docker-compose 服务运行,请在 db 服务中删除 ports 部分(包括 - '8081:8081' 行)。在server.js 中,将const mongoURL = 'mongodb://localhost:8081/app1'; 更改为const mongoURL = 'mongodb://db:27017/app1';。

    如果要从主机访问数据库,请将端口8081:8081 更改为<give-a-port-number>:27017。

    【讨论】:

    • 不,我没有将节点应用程序作为 docker-compose 服务运行。但是,是的,我在一些 SO 问题上读到了。
    • 然后将8081:8081 更改为8081:27017。它应该工作
    • mongodb 默认监听 27017 端口,我们映射到主机上的 8081。语法是host-port:container-port
    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 2020-10-20
    • 2018-01-03
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    相关资源
    最近更新 更多