[英]Postgres Docker Container tables not present in local DB windows
从 windows,我从本地机器连接到 Postgres Docker 容器。 但我看不到 postgres 容器中存在的表。 数据未在本地复制。 我按照本教程在 windows 上运行 postgres 容器。
我设法从转储文件创建表。
$ docker volume create --name postgres-volume
$ docker run -p 5432:5432 --name postgres_db -e POSTGRES_PASSWORD=password -v postgres-volume:/var/lib/postgresql/data -d postgres
$ docker exec -it <container-id> bash -c "pg_dump -h <source-url> -U postgres -d postgres > /tmp/dump.sql"
$ docker exec -it <container-id> bash -c "psql -f /tmp/dump.sql -U postgres -d postgres"
任何帮助,不胜感激。
容器旨在成为程序/服务的隔离实例。 它们与同一图像的主机和后续衍生产品都隔离开来。 他们从一个孤立的岛屿开始,里面什么都没有(它不是自己带来的)。 他们生成的任何数据都会在他们死后丢失。 他们也完全忘记了主机上的任何数据(目前)。 但是,有时,我们希望他们的数据是持久的,或者在他们每次启动时“注入”我们自己的数据。 例如您的案例PostgreSQL
。 我们希望PostgreSQL
每次启动时都能使用我们的模式。 而且,如果它保留了我们所做的任何更改或我们加载的数据,那就太好了。
输入docker 卷。 这是管理容器持久存储的好方法。 它们旨在安装在容器中,并让它们写入数据(或从先前的实例中读取),如果容器实例被删除,这些数据也不会被删除。 使用docker volume create myvolume1
,它将在/var/lib/docker/volumes/
中创建一个目录(在 windows 上,它将是另一个默认值。可以更改)。 您永远不必知道主机上的物理目录。 您只需要知道卷名myvolume1
(或您选择的任何名称)。
正如我们所说,默认情况下,容器与主机完全隔离。 特别是它的文件系统。 这意味着,当容器启动时,它不知道主机的文件系统上有什么。 而且,当容器实例被删除时,它在其生命周期中生成的数据也会随之消失。
但是,如果我们使用docker volumes
,情况会有所不同。 在容器启动时,我们可以从“外部”装载数据。 这些数据可以是我们之前提到的docker volume
,也可以是我们想要的特定路径(例如我们自己管理的 /home/me/somethingimport)。 后者不是docker volume
,但工作原理相同。
您链接的教程讨论了安装路径和docker volume
(在单独的示例中)。 当您执行docker run
时,这是使用-v
标志完成的。 Because using docker
on windows, there is an issue with permissions to the PostgreSQL
data directory on the host (which is mounted in the container), they recommend using docker volumes
.
这意味着在将docker volume
与PostgreSQL
实例一起使用后,您必须创建架构并加载所需的任何数据。 容器的后续重启必须使用相同的docker volume
。
docker volume create --name postgres-volume
docker run -p 5432:5432 --name postgres_db -e POSTGRES_PASSWORD=password -v postgres-volume:/var/lib/postgresql/data -d postgres
从教程
这是两条重要的线。 第一个创建创建docker volume
,第二个创建新的PostgreSQL
实例。 您对该实例的数据 (DML DDL) 所做的任何更改都将保存在docker volume
postgres-volume中。 如果您之前启动了使用该卷的容器(例如PostgreSQL
),它将找到上次留下的数据。 换句话说,使第二行成为新实例的原因是docker volume
是空的(它刚刚创建)。 PostgreSQL
的后续实例将找到您之前加载的架构+数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.