Docker Compose:NodeJS + MongoDB

时间:2015-09-02 18:30:06

标签: node.js mongodb docker docker-compose

我不能让我的码头工作。

这是我的dockerfile:

FROM node:0.12
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD . /myapp
RUN npm install

我的docker-compose.yml

db:
  image: mongo
  ports:
    - 27017
web:
  build: .
  command: npm start
  volumes:
    - .:/myapp
  ports:
    - 3000:3000
  links:
    - db
  environment:
    PORT: 3000

在server.js中:

  var MONGO_DB;
  var DOCKER_DB = process.env.DB_1_PORT;
  if ( DOCKER_DB ) {
    MONGO_DB = DOCKER_DB.replace( "tcp", "mongodb" ) + "/dev_db";
  } else {
    MONGO_DB = process.env.MONGODB;
  }

  mongoose.connect(MONGO_DB);

从此repo重复:https://github.com/projectweekend/Node-Backend-Seed 但是process.env.DB_1_PORT是空的。 如何添加?

由于

3 个答案:

答案 0 :(得分:24)

抱歉@ gettho.child,我太快接受了你的回答。我认为它有效,但它不是。我会在这里报告我的最终解决方案,因为我一直在努力实现它。

Dockerfile

FROM node:0.12
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev libkrb5-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD package.json /myapp/package.json
RUN npm install
ADD . /myapp

docker-compose.yml

db:
  image: mongo
  ports:
    - "27017:27017"
  command: "--smallfiles --logpath=/dev/null"
web:
  build: .
  command: node app.js
  volumes:
    - .:/myapp
  ports:
    - "3000:3000"
  links:
    - db
  environment:
    PORT: 3000 # this is optional, allows express to use process.env.PORT instead of a raw 3000

有趣的app.js摘录:

var MONGO_DB;
var DOCKER_DB = process.env.DB_PORT;
if ( DOCKER_DB ) {
  MONGO_DB = DOCKER_DB.replace( 'tcp', 'mongodb' ) + '/myapp';
} else {
  MONGO_DB = process.env.MONGODB;
}
var retry = 0;
mongoose.connect(MONGO_DB);

app.listen(process.env.PORT || 3000);

关于process.env.DB_PORT我尝试了很多事情。如果它没有开箱即用,我建议console.log(process.env);寻找mongo的IP。

最终网址应如下所示:mongodb://172.17.0.76:27017/myapp

祝你好运,值得拥有,Docker真棒!

编辑:

如果上述工作正常,我现在通过运行

找到了一个与技术无关的工作流程
  • docker-compose run web /bin/bash
  • 并在那里运行printenv

我希望这不是太多的自我推销,但我写了一篇关于这个主题的双重文章,可能会对一些读者有所帮助:https://augustin-riedinger.fr/en/resources/using-docker-as-a-development-environment-part-1/

干杯

答案 1 :(得分:1)

确保'Server.js'文件中的mongoDB IP(和端口)设置为'PORT_27017_TCP_ADDR'(也检查端口) - 运行'docker exec {web app container id} env'时可以找到。< / p>

答案 2 :(得分:0)

你的docker-compose应该是

environment:
   - MONGODB=3000

有关映射环境变量的更多信息,请参阅this link。您将环境变量声明为PORT而不是MONGODB