Tra*_*ace 4 mongoose mongodb docker docker-compose
我是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
Run Code Online (Sandbox Code Playgroud)
我的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
Run Code Online (Sandbox Code Playgroud)
在server.js中我尝试连接:
mongoose.connect('mongodb://localhost:27018');
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
mongoose.connect('mongodb://mongodb:27018');
Run Code Online (Sandbox Code Playgroud)
要运行docker-compose:
docker-compose -f docker-compose.local.yaml up --build
Run Code Online (Sandbox Code Playgroud)
我收到错误:
connection error: { MongoError: failed to connect to server [localhost:27018] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27018]
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
在server.js中使用mongodb而不是localhost:
mongoose.connect('mongodb://mongodb:27018');
Run Code Online (Sandbox Code Playgroud)
因为同一网络中的容器可以使用其服务名称进行通信.
请记住,每个容器和主机都有自己的localhost.每个localhost都是不同的host:容器A,容器B,主机(每个都有自己的网络接口).
编辑:
一定要搞定你的mongo:
docker-compose logs mongodb
docker-compose ps
Run Code Online (Sandbox Code Playgroud)
有时它因磁盘空间而无法启动.
编辑2:
对于较新版本的mongo,您还需要指定监听所有接口:
command: mongod --port 27018 --bind_ip_all
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2612 次 |
| 最近记录: |