用于持久化PostgreSQL数据库数据的Docker卷

时间:2019-12-13 12:24:49

标签: postgresql docker docker-compose docker-volume

我正在MacOS机器中使用Docker Compose启动PostgreSQL服务器:

#wheel div.sec {
   pointer-events: none;
}

#wheel div.sec .fa,
#wheel div.sec .fainv {
    pointer-events: all;
}

当我使用数据库GUI客户端连接到服务器并创建新数据库时,它可以正常工作。但是,如果我重新启动容器,该数据库将不再存在。

version: '3.1'

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

但是,如果我在“默认” $ docker stop postgres_db_1 $ docker start postgres_db_1 数据库上进行了更改(例如,创建一个新表),则该更改将成功地持久保存在Docker卷中(我重新启动容器并将其保留在那里)。

如您所见,我具有此体积映射:

postgres

此映射是否适用于PostgreSQL服务器内部的所有数据库?

1 个答案:

答案 0 :(得分:0)

默认路径Promise.all指的是Postgres数据的存储位置。但是,如果您使用文件系统挂载点,则documentation建议使用子目录,例如/var/lib/postgresql/data作为数据。

实际上,可以在服务的构建阶段通过/var/lib/postgresql/data/pgdata环境变量来控制存储位置。根据Postgres documentationPGDATA与Docker本身无关:

  

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