Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Postgres Shutdown Immediately after docker compose up?

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 [email protected]
web_1       | npm info using [email protected]
web_1       | npm info lifecycle [email protected]~prestart: [email protected]
web_1       | npm info lifecycle [email protected]~start: [email protected]
web_1       | 
web_1       | > [email protected] 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 
like image 928
Satnarayan Aggarwal Avatar asked Nov 08 '22 22:11

Satnarayan Aggarwal


1 Answers

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

like image 157
Clive Makamara Avatar answered Nov 15 '22 07:11

Clive Makamara