Postgresql,如何同步Docker和主机的数据?

时间:2017-02-12 14:09:52

标签: postgresql docker

我有以下两个想法。

  

使用-v同步数据文件

我找不到数据文件,我查找postgresql.conf,它显示/var/lib/postgresql/9.5/main中的数据。但我看到文件变小,而我的数据要大得多

  

使用-p,让docker使用主机数据库进行添加和删除。

当我这样时,它返回5432正在使用中。因为我的其他进展是使用postgres。

那么,我该怎么办?

1 个答案:

答案 0 :(得分:1)

首先:启动postgres的'基本'命令。

$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

这将只使用默认用户postgres和密码mysecretpassword启动一个postgres容器。此DB容器不是持久性的,这意味着重新启动计算机或重新启动容器可能会导致数据丢失。

默认情况下,postgres的数据将存储在/var/lib/postgresql/data中。您可以在运行命令中使用环境变量PGDATA来定义自己的路径。查看here了解详情。

因此,为了使您的数据持久化,我们需要将容器的/var/lib/postgresql/data中的数据挂载到您的主机。这里我们使用-v选项。

首先,我们需要在您的主机上创建一个目录或data volume。这将是我们安装数据的地方。我将在我的示例中使用一个目录(最基本的)。所以在您的主持人身上:

mkdir -p /var/my-data 

现在,您可以停止旧容器并使用-v标志重新创建容器以保留数据。

$ docker run --name some-postgres -v /var/my-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=mysecretpassword -d postgres

/var/lib/postgresql/data的数据将挂载到您主机上的/var/my-data。因此,当您删除postgres容器时,数据仍将位于/var/my-data中的主机上,您将可以重复使用它。

如果您要将主机上的postgres数据复制到postgres-docker,您需要复制原始postgres的数据(可能在/var/lib/postgresql/data/var/my-data。让他们都使用相同的数据路径可能会导致损坏,因此您必须复制它。

-p选项表示"map your container-port on the host port"。因此,您可以在端口5432上访问真正的postgresDB。默认端口。您的postgres-docker容器将在其容器上显示5432,但您无法从服务器外部访问它。使用-p,您可以在主机端口上映射容器端口5432(例如5433)。你的docker run命令将如下所示:

$ docker run --name some-postgres -v /var/my-data:/var/lib/postgresql/data -p 5433:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres