[英]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.