【问题标题】:Connection nodejs and mongo with docker用 docker 连接 nodejs 和 mongo
【发布时间】:2017-11-25 10:06:55
【问题描述】:

这是我的 docker-compose-file:

version: "2"
services:
  rest-api:
    build: .
    ports:
      - "3007:3007"
    links:
      - mongo
  mongo:
    image: mongo
    volumes:
      - /data/mongodb/db:/data/db
    ports:
      - "27017:27017"

这是我的 Dockerfile:

FROM mhart/alpine-node:latest

RUN rm -rf /tmp/node_modules
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/

WORKDIR /opt/app
ADD . /opt/app

EXPOSE 3007

CMD ["node", "index.js"]

当我运行镜像时,节点无法连接到 mongo:

MongoError: failed to connect to server [localhost:27017] on first connect

有什么问题吗?我该如何调试?

更新:

在我的节点应用程序中,我有:

let connection = mongoose.connect('mongodb://localhost/myapp');

【问题讨论】:

    标签: node.js mongodb docker docker-compose


    【解决方案1】:

    在您的节点应用程序中,您需要引用您的容器而不是本地主机。

    在您到 mongo 的连接字符串中,使用名称 mongo 作为主机,您可能只是在使用默认值

    https://docs.mongodb.com/manual/reference/connection-string/

    例如

    mongodb://mongo:27017/
    

    您需要这样做,因为 mongo 数据库位于单独的容器中(具有不同的 IP 地址),它们通过 TCP 链接,因此 localhost 与所在的容器节点相关。

    【讨论】:

    • @pissall 你有我可以看的回购。乐于助人
    【解决方案2】:

    Node 正在尝试连接到 localhost 上的 Mongo,但失败了,因为它与 Node 不在同一个容器中运行。相反,它在不同的容器中运行,即在不同的主机上。

    您的应用程序中可能有这样一行:

    var url = 'mongodb://localhost:27017/myproject';
    

    它定义了 MongoDB 的位置。您需要将localhost 更改为实际主机,在您的情况下为mongo

    【讨论】:

      猜你喜欢
      • 2019-11-27
      • 2021-02-11
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 2023-02-17
      相关资源
      最近更新 更多