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