据我所知,docker volume允许在docker容器中指定将在docker主机上共享/存储的目录/文件。例如postgres Dockerfile包含以下行
VOLUME /var/lib/postgresql/data
因此,这意味着/var/lib/postgresql/data
将实际“存储”在主机上,我将可以从主机系统访问该文件。例如,当我检查pg容器时:
"Mounts": [
{
"Name": "4fc1fe18d93fd2090f63619edc5d6244e9821805a2e070a0235d9305b2dfe80f",
"Source": "/mnt/sda1/var/lib/docker/volumes/4fc1fe18d93fd2090f63619edc5d6244e9821805a2e070a0235d9305b2dfe80f/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true
}
],
这意味着我可以在Source
路径下的主机上找到卷。我想知道4fc1fe18d93fd2090f63619edc5d6244e9821805a2e070a0235d9305b2dfe80f
路径中的Source
是什么意思。我在Docker主机上找不到容器或带有此ID的图像。
我无法理解的一点是,当我删除容器并重新创建容器时,Source
路径不同,实际上没有数据存在......
所以似乎对于数据持久性我必须在主机和容器路径上添加卷以强制它始终在相同路径下存储数据 - 这是正确的吗?
答案 0 :(得分:1)
关注" How do you list volumes in docker containers?",我写了一个脚本(updateDataContainerPath
),其中包含:
这样,我可以删除(docker rm
,显然没有-v
选项)容器并重新创建它,同时保持数据放入该卷。
例如,您可以在gitolite/run
中看到该脚本。
答案 1 :(得分:1)