簡體   English   中英

Docker-組成貓鼬

[英]Docker-compose 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');

因為同一網絡中的容器可以使用其服務名稱進行通信。

請記住,每個容器和主機都有自己的localhost。 每個localhost都是不同的host :容器A,容器B,主機(每個主機都有自己的網絡接口)。


編輯:

一定要搞定你的mongo:

docker-compose logs mongodb
docker-compose ps

有時它因磁盤空間而無法啟動。


編輯2:

對於較新版本的mongo,您還需要指定監聽所有接口:

command: mongod --port 27018 --bind_ip_all

我想,您應該在配置中添加links選項。 像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM