我想确保即使在我的Windows主机重启后,我的Postgres数据(使用基于Linux的图像)仍然存在。
我尝试按照How to persist data in a dockerized postgres database using volumes
步骤进行操作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
中的步骤进行操作
建议的方法是
docker volume create --name postgres_data --driver local
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"
}
]
我可以知道Windows目录位置在哪里,VOLUME postgres_data
挂载到哪里?
答案 0 :(得分:0)
今天我在问自己同样的问题,但我已经弄清楚了。
首先要注意的是,在postgres容器中,路径为:
/var/lib/postgresql/data
现在,您尝试跟踪的路径是另一条路径:
C:\ celery-hello-world> docker卷检查postgres_data [ { “ CreatedAt”:“ 2018-02-06T14:54:48Z”, “ Driver”:“ local”, “标签”: {}, “ Mountpoint”:“ / var / lib / docker / volumes / postgres_data / _data”, “ Name”:“ postgres_data”, “选项”:{}, “范围”:“本地” }]
/var/lib/docker/volumes/postgres_data/_data
我也在使用Docker for windows
和Unix
容器。
正如您可以正常检查的那样,您将不会看到此docker计算机:
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
但是有一个关于Unix
容器的访问技巧:
docker run -it --rm --privileged --pid=host justincormack/nsenter1
只需从您的CLI运行此命令,它将把您放入带有 Moby VM的完整权限。仅适用于Moby Linux VM(无效) 适用于Windows容器)。请注意,这也适用于Mac版Docker。
参考: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
中也可以找到相同的内容。