alybel
alybel

Reputation: 520

Docker postgres container loses data that should be stored in volume

I am running a postgres database generated by the below docker-compose file on Windows. Before running docker-compose up --build, I created a docker volume with docker volume --name postgresdata --driver local. The latter is done to avoid mounting a Windows folder into Postgres.

However, when I run docker-compose down followed by docker-compose up --build, the database is empty which I would not have expected. Any ideas or suggestions?

This is the docker-compose.yml file I am using:

version: '3.0'

services:

  db:
    image: postgres:latest
    restart: always
    ports:
      - 5432:5432
    env_file:
      - env_file
    volumes:
      - postgresdata
    networks:
     - db1

  market_data:
    build: .
    environment:
      PYTHONUNBUFFERED: 'true'
    stdin_open: true
    tty: true
    links:
     - db:db
    container_name: market_data_container
    volumes:
     - '.:/market_data'
    depends_on:
     - db
    networks:
     - db1

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
    networks:
     - db1
    depends_on:
     - db


volumes:
 market_data:
 postgresdata:
  external: true

networks:
 db1:
  driver: bridge

Upvotes: 4

Views: 2905

Answers (1)

adebasi
adebasi

Reputation: 3945

Postgres uses already a volume to persist data, but docker-compose down deletes this volume. You are using named volumes in your compose file, but don't mount it correctly.

version: '3.0'
services:
  db:
    image: postgres:latest
    restart: always
    ports:
      - 5432:5432
    env_file:
      - env_file
    volumes:
      - postgresdata:/var/lib/postgresql/data
    networks:
     - db1

Add the default path for postgres data to your volume postgresdata:/var/lib/postgresql/data. This should fix it.

Upvotes: 4

Related Questions