首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >docker-节点和mongo之间的组合连接

docker-节点和mongo之间的组合连接
EN

Stack Overflow用户
提问于 2018-10-30 00:02:24
回答 5查看 396关注 0票数 0

我读了很多关于使用docker连接应用程序的例子,看起来很简单

我的情况就是这样

代码语言:javascript
运行
复制
version: '2'

services:

  mongodb:
    image: mongo
    container_name: infra-mongodb
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin
    ports:
      - 27017:27017
  service:
    build:
      context: .
    container_name: service
    restart: always
    ports:
      - 3012:3012
    depends_on:
      - mongodb
    links:
      - mongodb

我在节点中的连接是

代码语言:javascript
运行
复制
const MongoClient = require('mongodb').MongoClient;
const mongoUrl = 'mongodb://admin:admin@mongodb:27017/admin?replicaSet=rs0&slaveOk=true'
MongoClient.connect(mongoUrl, { useNewUrlParser: true }, (err, client) => {
    console.log(err)
});

我有以下错误

代码语言:javascript
运行
复制
{ MongoNetworkError: failed to connect to server [9d574801e4b4:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND 9d574801e4b4 9d574801e4b4: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:64:8)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }

我不明白为什么主机变成了9d574801e4b4

当我在容器中运行ping mongodb时,一切都很正常

代码语言:javascript
运行
复制
PING mongodb (172.21.0.3) 56(84) bytes of data.
64 bytes from infra-mongodb.app-admin_default (172.21.0.3): icmp_seq=1 ttl=64 time=0.088 ms
64 bytes from infra-mongodb.app-admin_default (172.21.0.3): icmp_seq=2 ttl=64 time=0.101 ms
64 bytes from infra-mongodb.app-admin_default (172.21.0.3): icmp_seq=3 ttl=64 time=0.102 ms
64 bytes from infra-mongodb.app-admin_default (172.21.0.3): icmp_seq=4 ttl=64 time=0.216 ms
^C
--- mongodb ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3156ms
rtt min/avg/max/mdev = 0.088/0.126/0.216/0.053 ms
EN

回答 5

Stack Overflow用户

发布于 2018-10-30 00:20:32

默认情况下,mongo只在localhost上侦听。如果是用于本地开发,则只需使用bind it to all interfaces

代码语言:javascript
运行
复制
version: '2'

services:

  mongodb:
    image: mongo
    container_name: infra-mongodb
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin
    ports:
      - 27017:27017
    command: --bind_ip_all
票数 0
EN

Stack Overflow用户

发布于 2018-10-30 02:46:01

这里只是一个猜测,但Docker Compose中的depends_on字段只表示“这个容器必须等到另一个容器启动”。内部的服务并不一定要启动并运行。因此,您的应用程序可能启动得太快。当你的应用程序尝试连接时,Mongo服务器可能还没有准备好接受连接。运行docker-compose up,等待它无法启动,然后运行docker-compose restart service

如果这样可以修复它,那么如果应用程序在启动时连接失败,那么您可能希望让应用程序在某种超时后重新尝试连接。

票数 0
EN

Stack Overflow用户

发布于 2018-10-30 16:18:58

看看这个:

docker-compose.yaml

代码语言:javascript
运行
复制
version: '2' 

services:
  nodejs:
    container_name: nodejs
    image: nexus.XXXX.com:8000/${BE_BUILD}
    restart: always
    environment:
       - dbhost=mongo
    ports:
      - "8888:8888"
    links:
      - mongo
  mongo:
    container_name: mongo
    image: nexus.XXXX.com:8000/doc/docker/proj-mongodb:latest
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin
    ports:
      - "27017:27017"

我可以通过以下URL成功连接:

代码语言:javascript
运行
复制
const mongoUrl = mongodb://admin:admin@mongo:27017/admin?authSource=admin

检查以下可以解决问题的方法:

如果configuration.

  • Link需要将configuration.

  • Use设置为connect.

  • Check,则
  • 将dbHost名称从NodeJS NodeJS mongo容器从authSource mongo容器设置为connect.
  • Check。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53049436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档