質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Node.js

    1865questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • PostgreSQL

    1062questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • Docker

    711questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

docker-composeでのPostgreSQL接続

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,097

hukuda222

score 5

前提・実現したいこと

dockerの練習として、docker-composeでpostgresqlを扱おうとしています。

発生している問題・エラーメッセージ

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'start' ]
2 info using npm@3.10.3
3 info using node@v6.2.2
4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info lifecycle dockertest@1.0.0~prestart: dockertest@1.0.0
6 silly lifecycle dockertest@1.0.0~prestart: no script for prestart, continuing
7 info lifecycle dockertest@1.0.0~start: dockertest@1.0.0
8 verbose lifecycle dockertest@1.0.0~start: unsafe-perm in lifecycle true
9 verbose lifecycle dockertest@1.0.0~start: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/usr/src/app/node_modules/.bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
10 verbose lifecycle dockertest@1.0.0~start: CWD: /usr/src/app
11 silly lifecycle dockertest@1.0.0~start: Args: [ '-c', 'node index.js' ]
12 silly lifecycle dockertest@1.0.0~start: Returned: code: 1  signal: null
13 info lifecycle dockertest@1.0.0~start: Failed to exec start script
14 verbose stack Error: dockertest@1.0.0 start: node index.js
14 verbose stack Exit status 1
14 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/lib/utils/lifecycle.js:242:16)
14 verbose stack     at emitTwo (events.js:106:13)
14 verbose stack     at EventEmitter.emit (events.js:191:7)
14 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/lib/utils/spawn.js:40:14)
14 verbose stack     at emitTwo (events.js:106:13)
14 verbose stack     at ChildProcess.emit (events.js:191:7)
14 verbose stack     at maybeClose (internal/child_process.js:852:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5)
15 verbose pkgid dockertest@1.0.0
16 verbose cwd /usr/src/app
17 error Linux 4.9.6-moby
18 error argv "/usr/bin/node" "/usr/bin/npm" "start"
19 error node v6.2.2
20 error npm  v3.10.3
21 error code ELIFECYCLE
22 error dockertest@1.0.0 start: node index.js
22 error Exit status 1
23 error Failed at the dockertest@1.0.0 start script 'node index.js'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the dockertest package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error     node index.js
23 error You can get information on how to open an issue for this project with:
23 error     npm bugs dockertest
23 error Or if that isn't available, you can get their info via:
23 error     npm owner ls dockertest
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]

該当のソースコード

docker-compose.yml

version: '2'
services:
 web:
  build: .
  volumes:
  - ./web:/usr/src/app
  ports:
  - "3000:3000"
  links:
  - db
  volumes_from:
  - data

 db:
  image: postgres
  ports:
  - "1234:1234"
  volumes_from:
  - data

 data:
  image: busybox
  volumes: 
  - .data:/data


Dockerfile

FROM mhart/alpine-node:6.2.2

RUN apk update && apk add git
RUN npm install -g pm2

ADD ./web /usr/src/app
WORKDIR /usr/src/app
RUN ["npm", "install"]


ENTRYPOINT ["npm", "start"]


web/index.js

var pg = require('pg');
var async = require('async');

var connectString = "tcp://postgres@localhost:1234/data";

pg.connect(connectString, function(err, client) {
    if (err) {
        console.log('Connection Error:', err);
        throw err;
    } else {
        console.log('Connected');
    }
});

試したこと

上記のコードを実行したのですが、どうにも繋がりませんでした。

どのように直せば繋がるか教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

image:postgresの環境変数としてユーザー・DBが作成されていない。また、使用しているポートが違う。
db接続テストとしてnpm-pgでのサンプルに記載記載されている接続方法に変更。
package.jsonの内容が不明なので多分こんな感じで作ればいいかなと。

version: '2'
services:
 web:
  build: .
  volumes:
   - ./web:/usr/src/app
  links:
   - db

 db:
  image: postgres
  ports:
    - 5432
  environment:
    - POSTGRES_USER=pguser
    - POSTGRES_PASSWORD=pgpass
    - POSTGRES_DB=hoge
  volumes_from:
   - data


 data:
  image: busybox
  volumes: 
   - /var/lib/postgresql/data
FROM mhart/alpine-node:6.2.2

RUN apk update && apk add git
RUN npm install -g pm2

ADD ./web /usr/src/app
WORKDIR /usr/src/app
RUN ["npm", "install"]

CMD ["npm","start"]
var pg = require('pg');

// create a config to configure both pooling behavior 
// and client options 
// note: all config is optional and the environment variables 
// will be read if the config is not present 
var config = {
  user: 'pguser', //env var: PGUSER 
  database: 'hoge', //env var: PGDATABASE 
  password: 'pgpass', //env var: PGPASSWORD 
  host: 'db', // Server hosting the postgres database 
  port: 5432, //env var: PGPORT 
  max: 10, // max number of clients in the pool 
  idleTimeoutMillis: 30000, // how long a client is allowed to remain idle before being closed 
};


//this initializes a connection pool 
//it will keep idle connections open for a 30 seconds 
//and set a limit of maximum 10 idle clients 
var pool = new pg.Pool(config);

// to run a query we can acquire a client from the pool, 
// run a query on the client, and then return the client to the pool 
pool.connect(function(err, client, done) {
  if(err) {
    return console.error('error fetching client from pool', err);
  }
  client.query('SELECT $1::int AS number', ['1'], function(err, result) {
    //call `done()` to release the client back to the pool 
    done();

    if(err) {
      return console.error('error running query', err);
    }
    console.log(result.rows[0].number);
    //output: 1 
  });
});

pool.on('error', function (err, client) {
  // if an error is encountered by a client while it sits idle in the pool 
  // the pool itself will emit an error event with both the error and 
  // the client which emitted the original error 
  // this is a rare occurrence but can happen if there is a network partition 
  // between your application and the database, the database restarts, etc. 
  // and so you might want to handle it and at least log it out 
  console.error('idle client error', err.message, err.stack)
})

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/04 22:05

    回答ありがとうございます。
    おっしゃられたようにコードを訂正したのですが、エラー内容は変わりませんでした。
    docker -psによるとportは1234/tcpに繋がってるようなのですが……

    キャンセル

  • 2017/02/07 13:31

    動きました。ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Node.js

    1865questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • PostgreSQL

    1062questions

    PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

  • Docker

    711questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです