PostgreSQL docker 容器不将数据写入磁盘

标签 postgresql docker

我在使用 Docker Hub 中的 docker 和 postgres 图像时遇到了一些困难。我正在开发一个应用程序并使用 postgres docker 来存储我的开发数据。我正在使用以下命令启动我的容器:

sudo docker run --name  some-postgresql -e POSTGRES_DB=AppDB  -e POSTGRES_PASSWORD=App123! -e POSTGRES_USER=appuser -e PGDATA="/pgdata" --mount source=mydata,target=/home/myuser/pgdata  -p 5432:5432/tcp postgres

当我完成我的应用程序时,我通常必须运行“docker container prune”,以便释放容器名称并能够稍后再次运行它。直到最近,当我升级我的 postgres 图像以运行 PostgreSQL 版本 11 时,它才起作用。现在,当我启动我的容器并在其中创建数据时,下次我使用它时数据就消失了。我一直在阅读 docker 文档中的卷,找不到任何可以告诉我为什么这不起作用的内容。任何人都可以阐明这一点吗?

最佳答案

使用 -v $PGDATA_HOST:/var/lib/postgresql/data 指定卷挂载。

容器内的默认 PGDATA 是 /var/lib/postgresql/data,因此如果您不修改 Docker 镜像,则无需更改它。

例如将数据目录挂载到主机上的 /srv/pgdata/:

$ PGDATA_HOST=/srv/pgdata/
$ docker run -d -p 5432:5432 --name=some-postgres \
       -e POSTGRES_PASSWORD=secret                \
       -v $PGDATA_HOST:/var/lib/postgresql/data   \
       postgres

\ 仅在您将命令分成多行时才需要,为了清楚起见,我在这里这样做了。

关于PostgreSQL docker 容器不将数据写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55092413/

相关文章:

sql - 如何在 PostgreSQL 中的引用表上创建具有约束的外键

javascript - 错误: Connection terminated - ASYNC nodeJS

nginx - 使用 nginx proxy_pass 在本地主机上进行 docker 注册表

docker - 杀死X天前创建的Docker容器

sql - PostgreSQL 支持的最早时间戳

delphi - 'hex' 或 'escape' 中的 PostgreSQL 9.X bytea 表示形式用于缩略图

postgresql - 将 postgresql 本地复制到远程数据库(均带有密码)- 错误 : option "locale" not recognized

java - 在 Dockerfile 中运行 Java 时区更新程序 JAR 时出现权限错误

docker - docker-compose 中 ELASTICSEARCH_HOSTS 的语法是什么?

docker - 使用Helm Chart在Kubernetes集群上运行dockerized应用程序