Docker撰写:NodeJS + MongoDB

我不能让我的docker工作。

这是我的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); 

从这个回购重复: https : //github.com/projectweekend/Node-Backend-Seed但process.env.DB_1_PORT是空的。 我如何添加?

谢谢

对不起@ gettho.child,我太快接受了你的回答。 我认为这是工作,但事实并非如此。 我会在这里报告我的最终解决scheme,因为我一直在努力实现它。

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我已经尝试了很多事情。 如果它不能直接使用,我build议console.log(process.env); 并寻找mongo的知识产权。

最终的URL应该如下所示: mongodb://172.17.0.76:27017/myapp

祝你好运,这是值得的,Docker真棒!


编辑:

如果以上工作,我现在通过运行发现一个技术无关的工作stream程:

  • docker-compose run web /bin/bash
  • 并在那里运行printenv

我希望这不是太多的自我推销,但我写了一个关于这个主题的双重文章,可以帮助一些读者: https : //augustin-riedinger.fr/en/resources/using-docker-as-a-development-环境部分-1 /

干杯

确保'Server.js'文件中的mongoDB IP(和端口)设置为'PORT_27017_TCP_ADDR'(检查端口) – 可以在运行'docker exec {web app container id} env'时find。

你的docker写作应该是

 environment: - MONGODB=3000 

有关映射环境variables的更多信息,请参阅此链接 。 您声明的环境variables为PORT而不是MONGODB