用docker连接nodejs和mongo

这是我的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 

什么可能是错的? 我怎样才能debugging呢?

更新:

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

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

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

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

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

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

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

在你的连接string到mongo使用名称mongo作为主机,你可能只是使用默认的分钟

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

例如

 mongodb://mongo:27017/ 

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