我有以下两个想法。
使用-v同步数据文件
我找不到数据文件,我查找postgresql.conf
,它显示/var/lib/postgresql/9.5/main
中的数据。但我看到文件变小,而我的数据要大得多
使用
-p
,让docker使用主机数据库进行添加和删除。
当我这样时,它返回5432正在使用中。因为我的其他进展是使用postgres。
那么,我该怎么办?
答案 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