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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PostgreSQL

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

Node.js

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

Docker

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

Q&A

解決済

1回答

3461閲覧

docker-composeでのPostgreSQL接続

hukuda222

総合スコア13

PostgreSQL

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

Node.js

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

Docker

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

0グッド

0クリップ

投稿2017/02/04 08:56

###前提・実現したいこと
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.0prestart: dockertest@1.0.0
6 silly lifecycle dockertest@1.0.0
prestart: no script for prestart, continuing
7 info lifecycle dockertest@1.0.0start: dockertest@1.0.0
8 verbose lifecycle dockertest@1.0.0
start: unsafe-perm in lifecycle true
9 verbose lifecycle dockertest@1.0.0start: 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.0start: 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

javascript

1var pg = require('pg'); 2var async = require('async'); 3 4var connectString = "tcp://postgres@localhost:1234/data"; 5 6pg.connect(connectString, function(err, client) { 7 if (err) { 8 console.log('Connection Error:', err); 9 throw err; 10 } else { 11 console.log('Connected'); 12 } 13});

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

bash

1version: '2' 2services: 3 web: 4 build: . 5 volumes: 6 - ./web:/usr/src/app 7 links: 8 - db 9 10 db: 11 image: postgres 12 ports: 13 - 5432 14 environment: 15 - POSTGRES_USER=pguser 16 - POSTGRES_PASSWORD=pgpass 17 - POSTGRES_DB=hoge 18 volumes_from: 19 - data 20 21 22 data: 23 image: busybox 24 volumes: 25 - /var/lib/postgresql/data

bash

1FROM mhart/alpine-node:6.2.2 2 3RUN apk update && apk add git 4RUN npm install -g pm2 5 6ADD ./web /usr/src/app 7WORKDIR /usr/src/app 8RUN ["npm", "install"] 9 10CMD ["npm","start"]

js

1var pg = require('pg'); 2 3// create a config to configure both pooling behavior 4// and client options 5// note: all config is optional and the environment variables 6// will be read if the config is not present 7var config = { 8 user: 'pguser', //env var: PGUSER 9 database: 'hoge', //env var: PGDATABASE 10 password: 'pgpass', //env var: PGPASSWORD 11 host: 'db', // Server hosting the postgres database 12 port: 5432, //env var: PGPORT 13 max: 10, // max number of clients in the pool 14 idleTimeoutMillis: 30000, // how long a client is allowed to remain idle before being closed 15}; 16 17 18//this initializes a connection pool 19//it will keep idle connections open for a 30 seconds 20//and set a limit of maximum 10 idle clients 21var pool = new pg.Pool(config); 22 23// to run a query we can acquire a client from the pool, 24// run a query on the client, and then return the client to the pool 25pool.connect(function(err, client, done) { 26 if(err) { 27 return console.error('error fetching client from pool', err); 28 } 29 client.query('SELECT $1::int AS number', ['1'], function(err, result) { 30 //call `done()` to release the client back to the pool 31 done(); 32 33 if(err) { 34 return console.error('error running query', err); 35 } 36 console.log(result.rows[0].number); 37 //output: 1 38 }); 39}); 40 41pool.on('error', function (err, client) { 42 // if an error is encountered by a client while it sits idle in the pool 43 // the pool itself will emit an error event with both the error and 44 // the client which emitted the original error 45 // this is a rare occurrence but can happen if there is a network partition 46 // between your application and the database, the database restarts, etc. 47 // and so you might want to handle it and at least log it out 48 console.error('idle client error', err.message, err.stack) 49})

投稿2017/02/04 12:04

編集2017/02/07 00:44
mosapride

総合スコア1480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hukuda222

2017/02/04 13:05

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

2017/02/07 04:31

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問