gpt4 book ai didi

postgresql - 将 Postgres 数据挂载到 Windows 主机目录

转载 作者:行者123 更新时间:2023-11-29 11:22:36 55 4
gpt4 key购买 nike

我想确保我的 Postgres 数据(使用基于 Linux 的镜像)持续存在,即使在我的 Windows 主机重新启动后也是如此。

我尝试按照 How to persist data in a dockerized postgres database using volumes 的步骤操作

docker-compose.yml

volumes:
- ./postgres_data:/var/lib/postgresql/data

但是,我遇到了错误

waiting for server to start....FATAL:  data directory "/var/lib/postgresql/data/pgdata" has wrong ownership
HINT: The server must be started by the user that owns the data directory.
stopped waiting
pg_ctl: could not start server

然后,我试着按照https://forums.docker.com/t/trying-to-get-postgres-to-work-on-persistent-windows-mount-two-issues/12456/5中的步骤

建议的方法是

docker volume create --name postgres_data --driver local

docker-compose.yml

services:
postgres:
volumes:
- postgres_data:/var/lib/postgresql/data

volumes:
postgres_data:
external: true

但是,我对命令 docker volume create --name postgres_data --driver local 感到困惑。因为,它没有提到 Windows 主机的确切路径。

我试过了

C:\celery-hello-world>docker volume create postgres_data
postgres_data

C:\celery-hello-world>docker volume inspect postgres_data
[
{
"CreatedAt": "2018-02-06T14:54:48Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/postgres_data/_data",
"Name": "postgres_data",
"Options": {},
"Scope": "local"
}
]

我可以知道 VOLUME postgres_data 挂载到的 Windows 目录位置在哪里吗?

最佳答案

今天我问自己同样的问题,但我想通了。

首先要注意的是,在 postgres 容器中,路径是:

 /var/lib/postgresql/data

现在你试图追踪的路径是另一条路径:

C:\celery-hello-world>docker volume inspect postgres_data [ { "CreatedAt": "2018-02-06T14:54:48Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/postgres_data/_data", "Name": "postgres_data", "Options": {}, "Scope": "local" } ]

/var/lib/docker/volumes/postgres_data/_data

我也在使用 Docker for windowsUnix 容器。

正如你可以正常检查的那样,你不会看到这个 docker 机器:

docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS

但是关于 Unix 容器有一个访问它的技巧:

docker run -it --rm --privileged --pid=host justincormack/nsenter1

Just run this from your CLI and it'll drop you in a container with full permissions on the Moby VM. Only works for Moby Linux VM (doesn't work for Windows Containers). Note this also works on Docker for Mac.

引用:https://www.bretfisher.com/getting-a-shell-in-the-docker-for-windows-vm/

从那里你可以导航到这个文件夹(注意我将我的卷命名为 postgresql-volume):

/var/lib/docker/volumes/postgresql-volume/_data    ls
PG_VERSION pg_dynshmem pg_notify pg_stat_tmp postgresql.auto.conf
base pg_hba.conf pg_replslot pg_subtrans postgresql.conf
global pg_ident.conf pg_serial pg_tblspc postmaster.opts
pg_clog pg_logical pg_snapshots pg_twophase postmaster.pid
pg_commit_ts pg_multixact pg_stat pg_xlog

所以要明确一点,它位于上述目录中 Docker for Windows 提供的 VM 中。

Docker for windows 需要为虚拟化启用 Hyper-V

您还可以在 Docker for windows 中找到图像位置,转到 Settings->Advanced->Disk image location 在我的例子中是:

"C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx"

另请注意,同样可以在 Hyper-V Manager 中找到。

关于postgresql - 将 Postgres 数据挂载到 Windows 主机目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48645804/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com