wake-up-neo.net

Docker Compose: NodeJS + MongoDB

Ich kann mein Andockgerät nicht zum Laufen bringen.

Hier ist meine Andockdatei:

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

Mein docker-compose.yml

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

Und in 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);

wie aus diesem Repo dupliziert: https://github.com/projectweekend/Node-Backend-Seed aber process.env.DB_1_PORT ist leer. Wie kann ich es hinzufügen?

Vielen Dank

12

Sorry @ gettho.child, ich habe Ihre Antwort zu schnell akzeptiert. Ich dachte, dass es funktionierte, aber es funktionierte nicht. Ich berichte hier meine endgültige Lösung, da ich einige Probleme hatte, dies zu erreichen.

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

Und die interessanten app.js-Extrakte:

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);

In Bezug auf den process.env.DB_PORT habe ich viele Dinge ausprobiert. Wenn es nicht sofort funktioniert, schlage ich vor, console.log(process.env); zu suchen und nach der IP des Mongo zu suchen. 

Die endgültige URL sollte folgendermaßen aussehen: mongodb://172.17.0.76:27017/myapp

Viel Glück, es lohnt sich, Docker's Awesome!


BEARBEITEN:

Wenn dies funktioniert, habe ich jetzt einen techno-agnostischen Workflow gefunden, indem ich Folgendes ausgeführt habe: 

  • docker-compose run web /bin/bash
  • und dort läuft printenv

Ich hoffe, dass dies nicht zu viel Eigenwerbung ist, aber ich habe einen doppelten Artikel zum Thema geschrieben, der einigen Lesern helfen kann: https://augustin-riedinger.fr/de/resources/using-docker-as-a- Entwicklungsumgebung-Teil-1/

Prost

23

Stellen Sie sicher, dass die IP-Adresse (und der Port) von mongoDB in Ihrer 'Server.js'-Datei auf' PORT_27017_TCP_ADDR 'gesetzt ist (prüfen Sie auch den Port). Wird beim Ausführen von' docker exec {Web-App-Container-ID} env 'gefunden.

1
Asher A

Ihr Docker-Compose sollte sein 

environment:
   - MONGODB=3000

Weitere Informationen zum Zuordnen von Umgebungsvariablen finden Sie unter this link . Sie deklarieren die Umgebungsvariable als PORT anstelle von MONGODB.

0
GHETTO.CHiLD