node.js - Nodejs应用程序docker无法连接到mongodb docker容器

标签 node.js mongodb docker

我有一个 dockerized 的 nodejs 应用程序,需要一个复制的 MongoDB 数据库。我已经在 docker-compose 中构建了复制的 MongoDB,并且工作得很好。如果我运行命令 docker inform MongoDB-primary |grep IPAddress 其打印:

"IPAddress": "",
            "IPAddress": "172.18.0.2",

现在在我的应用程序中,我将此 IP 指定为 mongoconnection 字符串(当然带有协议(protocol)名称),但应用程序无法连接到 MongoDB 并抛出此错误消息(应用程序也是一个 docker 容器):

 message: 'failed to connect to server [172.18.0.2:27017] on first connect [MongoNetworkError: connection 1 to 172.18.0.2:27017 timed out]',

这是我的 mongodb docker 撰写文件:

version: '2'

services:
  mongodb-primary:
    image: 'bitnami/mongodb:latest'
    environment:
      - MONGODB_REPLICA_SET_MODE=primary
    volumes:
      - 'mongodb_master_data:/bitnami'

  mongodb-secondary:
    image: 'bitnami/mongodb:latest'
    depends_on:
      - mongodb-primary
    environment:
      - MONGODB_REPLICA_SET_MODE=secondary
      - MONGODB_PRIMARY_HOST=mongodb-primary
      - MONGODB_PRIMARY_PORT_NUMBER=27017

  mongodb-arbiter:
    image: 'bitnami/mongodb:latest'
    depends_on:
      - mongodb-primary
    environment:
      - MONGODB_REPLICA_SET_MODE=arbiter
      - MONGODB_PRIMARY_HOST=mongodb-primary
      - MONGODB_PRIMARY_PORT_NUMBER=27017

volumes:
  mongodb_master_data:
    driver: local

我的 Node js 应用程序 dockerfile 是:

FROM node:6.0

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=productio


# Bundle app source
COPY . .

EXPOSE 3001

CMD [ "npm", "start" ]

我该如何解决这个问题?

最佳答案

您的 docker-compose 不会自动向外部世界公开 tcp 端口,例如您的主机 PC(我假设您的 NodeJs 在主机上运行,​​并且不包含在 docker-compose 中)。这是 docker 桥接网络的行为,您可以在 https://docs.docker.com/network/bridge/ 阅读更多内容。

您必须执行以下操作之一:

将 NodeJs 容器包含到 docker-compose

docker-compose.yml公开端口

关于node.js - Nodejs应用程序docker无法连接到mongodb docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53922856/

相关文章:

MongoDB $where 查询和可尾游标——WAS : date math best practices

MongoDB : aggregation framework : $match between fields

javascript - 为什么node.js中的mysql多语句选项会增加SQL注入(inject)的范围?

node.js - Mongoose 填充返回空数组

node.js - REST API 聊天 - 实时获取消息的端点

mongodb - 如何使用 Mongoose 执行 runCommand?

amazon-web-services - 从服务器上的容器访问AWS S3存储桶

java - 无法在多阶段 docker 构建中从一个阶段复制到另一个阶段

docker - 如何在 Docker 镜像的 .bashrc 中设置别名

node.js - 我正在尝试在 node.js 项目中的模块之间传递数据,但我遗漏了一些东西