我在使用 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/