docker - 重新启动容器时将数据保存在带有卷的 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" 需要添加,它和大卫迷宫的解决方案一样有效
解决方案
在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
并将数据存储在那里。由于您在父目录上安装卷而不是确切路径,因此这会触发匿名卷情况。
推荐阅读
- java - 不同视图中具有相同 ID 的两个按钮
- c# - 如何让 EntityTypeBuilder 以新的方式发表正确的评论?
- ansible - 是否可以使用 Ansible 使用 start init.d 服务?
- c++ - 使用 Ensmallen 优化时遇到问题
- ios - 合并两个单一响应 RXSwift
- c# - 为什么实体框架在计算总和时会出现性能问题
- windows - 如何在命令提示符下获取文件名
- python - 在不改变比例和平移的情况下更新 pyqtgraph ImageView 图像
- javascript - TypeError:存根预计会产生,但没有从单元测试返回回调传递
- javascript - 如何在 ReactJS 的导出函数中使用 this.state