首页 > 解决方案 > 重新启动容器时将数据保存在带有卷的 postgres docker 上

问题描述

我已阅读 stackoverflow 帖子,但无法找到解决我使用 postgres 使用卷保存数据的问题的解决方案:

首先我创建一个卷:

docker volume create pgdata

然后我运行 postgres 容器:

docker run -d -v pgdata:/var/lib/postgresql -e POSTGRES_PASSWORD=password -p 5432:5432 postgres

然后我创建一个与 sql 连接的数据库:

psql postgresql://postgres:password@localhost:5432/postgres

停止容器后,我重新启动:

docker run -d -v pgdata:/var/lib/postgresql -e POSTGRES_PASSWORD=password -p 5432:5432 postgres

数据库丢失。它不应该留在那里,因为我使用相同的音量吗?

编辑: PGDATA="/var/lib/postgresql/data/pgdata" 需要添加,它和大卫迷宫的解决方案一样有效

标签: docker

解决方案


postgres图像中,PostgreSQL 数据目录是/var/lib/postgresql/data. 除非您将卷安装在路径上,否则它不会被使用。

docker run -d \
  -v pgdata:/var/lib/postgresql/data \ # <-- add .../data
  -e POSTGRES_PASSWORD=password \
  -p 5432:5432 \
  postgres

在技​​术层面上,这是因为Dockerfile声明了VOLUME /var/lib/postgresql/data. 如果在该确切路径上没有安装其他任何东西,这会导致 Docker 有时创建一个匿名卷docker run并将数据存储在那里。由于您在父目录上安装卷而不是确切路径,因此这会触发匿名卷情况。


推荐阅读