docker工人 – 组成mongoose

我是Docker的新手,我正在尝试使用docker-compose进行最简单的设置,但是没有成功连接到Mongodb。

我的docker-compose.local.yaml文件:

version: "2" services: posts-api: build: dockerfile: Dockerfile.local context: ./ volumes: - ".:/app" ports: - "6820:6820" depends_on: - mongodb mongodb: image: mongo:3.5 ports: - "27018:27018" command: mongod --port 27018 

我的Docker文件:

 FROM node:7.8.0 MAINTAINER Livefeed 'project.livefeed@gmail.com' RUN mkdir /app VOLUME /app WORKDIR /app ADD package.json yarn.lock ./ RUN eval rm -rf node_modules && \ yarn ADD server.js . RUN mkdir config src ADD config config/ ADD src src/ EXPOSE 6820 EXPOSE 27018 CMD yarn run local 

在server.js中我尝试连接:

 mongoose.connect('mongodb://localhost:27018'); 

我也试过:

 mongoose.connect('mongodb://mongodb:27018'); 

运行docker-compose:

 docker-compose -f docker-compose.local.yaml up --build 

我收到错误:

 connection error: { MongoError: failed to connect to server [localhost:27018] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27018] 

我错过了什么?

在server.js中使用mongodb而不是localhost

 mongoose.connect('mongodb://mongodb:27018'); 

因为同一networking中的容器可以使用其服务名称进行通信。

请记住,每个容器和主机都有自己的本地主机。 每个本地主机都是不同的host :容器A,容器B,主机(每个主机都有自己的networking接口)。


编辑:

一定要把你的mongo搞定:

 docker-compose logs mongodb docker-compose ps 

有时由于磁盘空间不能启动。


编辑2:

使用更新版本的mongo,您还需要指定监听所有接口:

 command: mongod --port 27018 --bind_ip_all 

我认为,你应该添加links选项在你的configuration。 喜欢这个:

 ports: - "6820:6820" depends_on: - mongodb links: - mongodb 

更新

正如我所承诺的

 version: '2.1' services: pm2: image: keymetrics/pm2-docker-alpine:6 restart: always container_name: pm2 volumes: - ./pm2:/app links: - redis_db - db environment: REDIS_CONNECTION_STRING: redis://redis_db:6379 nginx: image: firesh/nginx-lua restart: always volumes: - ./nginx:/etc/nginx - /var/run/docker.sock:/tmp/docker.sock:ro ports: - 80:80 links: - pm2 s3: # mock for development image: lphoward/fake-s3:latest redis_db: container_name: redis_db image: redis ports: - 6379:6379 db: # for scorebig-syncer image: mysql:5.7 ports: - 3306:3306