无法通过Docker中的node.js连接到MongoDB
我的node.js express应用程序无法连接到Docker中的MongoDB。 我不熟悉Docker。
node.js连接:
import mongodb from 'mongodb'; ... mongodb.MongoClient.connect('mongodb://localhost:27017', ... );
Dockerfile:
FROM node:argon RUN mkdir /app WORKDIR /app COPY package.json /app RUN npm install COPY . /app EXPOSE 3000 CMD ["npm", "start"]
泊坞窗,compose.yml
version: “2” services: web: build: . volumes: — ./:/app ports: — “3000:3000” links: — mongo mongo: image: mongo ports: — “27017:27017”
构build命令: docker build -t NAME .
运行命令: docker run -ti -p 3000:3000 NAME
连接错误:
[MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]] name: 'MongoError', message: 'failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]'
尝试:
mongodb.MongoClient.connect('mongodb://mongo:27017', ... );
更改您docker-compose.yml
:
version: "2" services: web: build: . volumes: - ./:/app ports: - "3000:3000" links: - mongo mongo: image: mongo ports: - "27017:27017"
并使用一些docker工具撰写命令:
docker-compose down docker-compose build docker-compose up -d mongo docker-compose up web
尝试这个。
- 当使用链接的Docker容器时,应该使用容器的名字,例如你的连接mongodb应该是
mongodb.MongoClient.connect('mongodb://mongo:27017', ... );
而不是mongodb.MongoClient.connect('mongodb://localhost:27017', ... );
。 将其更改为mongo的原因是因为您在docker-compose.yml
使用了链接属性mongo。 这将导致您的/etc/hosts
的泊坞窗容器中的mongo主机名。 引用链接容器 。 -
docker-compose.yml似乎缺less一个缩进。 mongo属性应该和web一样。
version: '2' services: web: build: . volumes: ['./:/app'] ports: [ '3000:3000' ] links: [ mongo ] mongo: image: mongo ports: [ '27017:27017' ]
-
我试过你的configuration使用我的docker我所做的是更新
docker-compose.yml
然后我docker-compose build
然后docker-compose up
。 我本地运行的日志