skip to Main Content

How do you launch Postgres from Docker, using docker-compose?

My docker-compose.yml looks like:

version: "3.6"

services:

  db:
    container_name: db
    image: postgres:14-alpine
    environment:
      - POSTGRES_USER=test
      - POSTGRES_PASSWORD=test
      - POSTGRES_DB=test
    ports:
      - "5432:5432"
    command: -c fsync=off -c synchronous_commit=off -c full_page_writes=off --max-connections=200 --shared-buffers=4GB --work-mem=20MB
    tmpfs:
      - /var/lib/postgresql

  web:
    container_name: web
    build:
      context: ..
      dockerfile: test_tools/Dockerfile
      shm_size: '2gb'
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - db

This is a simple test environment to mimic a web server and a database server.

Yet when I build this, it fails with:

Creating db ... error

ERROR: for db  Cannot start service db: driver failed programming external connectivity on endpoint db (bdaebf844ee8ddd593b6bc75733d8aa6196112b62f7909be060017a9a33b3c34): Error starting userland proxy: listen tcp4 0.0.0.0:5432: bind: address already in use

Why is my Postgres container trying to allocate a port on the host?

I do have Postgres running on port 5432 of the host, but why would this be interfering? These are just test containers that only need to talk to each other, and should not be accessible to the host, much less allocate host ports.

I’ve confirmed with docker ps -a that there are no other containers that might also be consuming port 5432.

2

Answers


  1. ports:
      - 5432
    

    will start your Postgres, but on a random (free) host port.

    Login or Signup to reply.
  2. Try to map postgres to different port on host for example

    • ports:
      • 5432:15432

    will make your db works on port 15432 on your host.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search