首页 > 解决方案 > Docker volume for persisting PostgreSQL database data

问题描述

I'm starting a PostgreSQL server with Docker Compose in my MacOS machine:

version: '3.1'

services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: example
    ports:
      - 5432:5432
    volumes:
      - ./dbdata:/var/lib/postgresql/data

When I connect to the server using a database GUI client and create a new database, it works fine. But then, if I restart the container that database does not exist anymore.

$ docker stop postgres_db_1
$ docker start postgres_db_1

However, if I make changes on the "default" postgres database (e.g. create a new table), that change is persisted in the Docker volume successfuly (I restart container and it remains there.)

As you see, I have this volume mapping:

./dbdata:/var/lib/postgresql/data

Is this mapping correct for all databases inside PostgreSQL server?

标签: postgresqldockerdocker-composedocker-volume

解决方案


默认路径/var/lib/postgresql/data是指存储 Postgres 数据的地方。但是,如果您使用的是文件系统挂载点,则文档建议使用子目录,例如/var/lib/postgresql/data/pgdata用于数据。

实际上,存储位置可以通过PGDATA服务构建阶段的环境变量来控制。根据Postgres文档PGDATA,这与 Docker 本身无关:

传统上,数据库集群使用的配置和数据文件一起存储在集群的数据目录中,通常称为 PGDATA(在可用于定义它的环境变量的名称之后)。PGD​​ATA 的常见位置是/var/lib/pgsql/data.


推荐阅读