web-dev-qa-db-ja.com

Docker Compose:NodeJS + MongoDB

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

このリポジトリからの複製から: https://github.com/projectweekend/Node-Backend-Seed but process.env.DB_1_PORTは空です。 どうすれば追加できますか?

ありがとう

12

申し訳ありませんが、@ 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を探すことをお勧めします。

最終的なURLは次のようになります:_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 /

乾杯

24

'Server.js'ファイルのmongoDB IP(およびポート)が 'PORT_27017_TCP_ADDR'(ポートもチェック)に設定されていることを確認してください-'docker exec {web app container id} env'を実行すると見つかります。

1
Asher A

あなたのdocker-composeは

environment:
   - MONGODB=3000

環境変数のマッピングの詳細については、 このリンク を参照してください。環境変数をPORTではなくMONGODBとして宣言しています。

0
GHETTO.CHiLD