Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql,如何同步Docker和主机的数据?_Postgresql_Docker - Fatal编程技术网

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

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 -

我有以下两个想法

使用-v同步数据文件

我没有找到数据文件,我查找了
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