5

Here I am using postgresql image and node official image and my docker-compose.yml file looks like

version: '2'
services:
  postgres:
    restart: always
    image: sameersbn/postgresql:9.6-2
    ports:
      - "5432:5432"
    environment:
      - DB_USER=shorturl
      - DB_PASS=shorturl
      - DB_NAME=shorturl
  web:
    build: .
    ports:
     - "4000:4000"
    volumes:
     - .:/shortlr
    depends_on:
     - postgres
    command: ["./wait-for-it.sh","postgres:5432", "--", "npm", "start"]

and when i run docker-compose up then my logs looks like

shubham@shuboy2014:~/shortlr$ docker-compose up
Recreating shortlr_postgres_1 ... 
Recreating shortlr_postgres_1 ... done
Recreating shortlr_web_1 ... 
Recreating shortlr_web_1 ... done
Attaching to shortlr_postgres_1, shortlr_web_1
postgres_1  | Initializing datadir...
web_1       | wait-for-it.sh: waiting 15 seconds for postgres:5432
postgres_1  | Initializing certdir...
postgres_1  | Initializing logdir...
postgres_1  | Initializing rundir...
postgres_1  | Setting resolv.conf ACLs...
postgres_1  | Creating database user: shorturl
postgres_1  | Creating database: shorturl...
postgres_1  | ‣ Granting access to shorturl user...
postgres_1  | Starting PostgreSQL 9.6...
postgres_1  | LOG:  database system was shut down at 2017-04-28 14:23:20 UTC
postgres_1  | LOG:  MultiXact member wraparound protections are now enabled
postgres_1  | LOG:  autovacuum launcher started
postgres_1  | LOG:  database system is ready to accept connections
postgres_1  | LOG:  incomplete startup packet
web_1       | wait-for-it.sh: postgres:5432 is available after 2 seconds
web_1       | npm info it worked if it ends with ok
web_1       | npm info using npm@4.2.0
web_1       | npm info using node@v7.9.0
web_1       | npm info lifecycle shortlr@0.0.5~prestart: shortlr@0.0.5
web_1       | npm info lifecycle shortlr@0.0.5~start: shortlr@0.0.5
web_1       | 
web_1       | > shortlr@0.0.5 start /shortlr
web_1       | > node server.js
web_1       | 
web_1       | Listening on http://localhost:4000/
web_1       | Unhandled rejection SequelizeBaseError: connect ECONNREFUSED 127.0.0.1:5432
web_1       |     at /shortlr/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:98:20
web_1       |     at Connection.<anonymous> (/shortlr/node_modules/pg/lib/client.js:186:5)
web_1       |     at emitOne (events.js:96:13)
web_1       |     at Connection.emit (events.js:191:7)
web_1       |     at Socket.<anonymous> (/shortlr/node_modules/pg/lib/connection.js:86:10)
web_1       |     at emitOne (events.js:96:13)
web_1       |     at Socket.emit (events.js:191:7)
web_1       |     at emitErrorNT (net.js:1283:8)
web_1       |     at _combinedTickCallback (internal/process/next_tick.js:80:11)
web_1       |     at process._tickCallback (internal/process/next_tick.js:104:9)

postgresql shutdown immediately when i run docker-compose up and any helpful answers will be appreciated.

shubham@shuboy2014:~/shortlr$ docker-compose ps
       Name                     Command               State           Ports          
------------------------------------------------------------------------------------
shortlr_postgres_1   /sbin/entrypoint.sh              Up      0.0.0.0:5432->5432/tcp 
shortlr_web_1        ./wait-for-it.sh postgres: ...   Up      0.0.0.0:4000->4000/tcp 
  • http://stackoverflow.com/q/37259584/905902 – wildplasser Apr 28 '17 at 15:35
  • 1
    @wildplasser my problem not solved – Satnarayan Aggarwal Apr 28 '17 at 19:13
  • You're not linking anything here. First add a links section in your web app. Then used the link in your web app. There is no db on the localhost interface of the web container. Pgsql is up, just not at the location you specified in your node app. After linking containers your db location will be something like postgres:5432 not localhost. – papey Apr 29 '17 at 05:49

1 Answers1

1

Add a link between your web and postgres image like so:

version: '2'
services:
  postgres:
    restart: always
    image: sameersbn/postgresql:9.6-2
    ports:
      - "5432:5432"
    environment:
      - DB_USER=shorturl
      - DB_PASS=shorturl
      - DB_NAME=shorturl
  web:
    build: .
    ports:
     - "4000:4000"
    volumes:
     - .:/shortlr
    depends_on:
     - postgres
    links:
     - postgres
    command: ["./wait-for-it.sh","postgres:5432", "--", "npm", "start"]

Although you should use networks instead because links is a legacy option. Read the docs on networks here

Clive Makamara
  • 2,845
  • 16
  • 31