Postgresql,如何同步Docker和主机的数据?
我有以下两个想法 使用-v同步数据文件 我没有找到数据文件,我查找了Postgresql,如何同步Docker和主机的数据?,postgresql,docker,Postgresql,Docker,我有以下两个想法 使用-v同步数据文件 我没有找到数据文件,我查找了postgresql.conf,它在/var/lib/postgresql/9.5/main中显示了数据。但是我看到的文件变化很小,而我的数据却大得多 使用-p,让docker使用主机数据库进行添加和删除 当我这样做时,它返回5432正在使用。因为我的另一个进度是使用postgres $ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -
postgresql.conf
,它在/var/lib/postgresql/9.5/main
中显示了数据。但是我看到的文件变化很小,而我的数据却大得多
使用-p
,让docker使用主机数据库进行添加和删除
当我这样做时,它返回5432正在使用。因为我的另一个进度是使用postgres
$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
那么,我能做什么呢?首先:启动postgres的“基本”命令
$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
这将只启动一个带有默认用户postgres和密码mysecretpassword的postgres容器。此DB容器不是持久的,这意味着重新启动计算机或重新启动容器可能会导致数据丢失
默认情况下,postgres的数据将存储在/var/lib/postgresql/data
中。您可以通过在run命令中使用环境变量PGDATA
来定义自己的路径。查看更多信息
因此,为了使数据持久化,我们需要将容器的/var/lib/postgresql/data
中的数据装载到主机。在这里,我们使用-v
选项
首先,我们需要在您的主机上创建一个目录或。这将是我们装载数据的地方。我将在我的示例中使用一个目录(最基本)。因此,在您的主机上:
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
选项意味着“将您的容器端口映射到主机端口”
。因此,您可以在端口5432
上访问真正的postgresDB。默认端口。您的postgres docker容器将在其容器上公开5432
,但您无法从服务器外部访问它。使用-p
可以在主机端口上映射您的容器端口5432
(例如5433
)。您将看到docker运行的命令如下所示:
$ docker run --name some-postgres -v /var/my-data:/var/lib/postgresql/data -p 5433:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres