Node.js 连接nodejs和mongo与docker

Node.js 连接nodejs和mongo与docker,node.js,mongodb,docker,docker-compose,Node.js,Mongodb,Docker,Docker Compose,这是我的docker撰写文件: 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 mh

这是我的docker撰写文件:

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');

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

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

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

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

在节点应用程序中,您需要引用您的容器而不是localhost

在与mongo的连接字符串中,使用名称
mongo
作为主机,此时可能只使用默认名称

e、 g


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

@pissall您有我可以查看的repo吗。很乐意帮忙
mongodb://mongo:27017/