【发布时间】:2020-05-27 15:11:52
【问题描述】:
我使用 Postgres:11 docker 映像有一段时间了,直到我注意到在我的持久卷挂载“pg-data”(目标:“/var/lib/postgresql/data/pgdata”)旁边还有另一个执行docker inspect pgcontainer 时列出的未命名卷,目标:“/var/lib/postgresql/data”:
"Mounts": [
{
"Type": "volume",
"Name": "pg-data",
"Source": "/data/docker/docker/volumes/pg-data/_data",
"Destination": "/var/lib/postgresql/data/pgdata",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "4d0ab5fd1d81b05f11805f19569e148427194ef465f0d4dc301b200b8308ada6",
"Source": "/data/docker/docker/volumes/4d0ab5fd1d81b05f11805f19569e148427194ef465f0d4dc301b200b8308ada6/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
经过进一步调查,事实证明Dockerfile 本身定义了一个卷安装路径,我用我的 docker-compose.yml 覆盖了它:
services:
db:
volumes:
- pg-data:/var/lib/postgresql/data/pgdata
volumes:
pg-data:
imposm-cache-data:
它现在似乎是一个嵌套卷。数据存储在卷pg-data 中,但总是在它之前自动创建另一个(未命名的)卷。它可以工作,但这并不理想,我想解决这个问题。
我只能想出两个解决方案:
使用另一个容器(例如,busybox)挂载带有
--volume标志的pg-data,并复制到另一个带有子文件夹“data”的命名卷,然后使用新命名卷并将挂载路径更改为/var/lib/postgresql/data另一个明显的想法是克隆 Dockerfile 并创建一个没有卷的新。
由于该卷中有大约 100GB 的数据,因此选项 1 会有点慢。选项 2 意味着从现在开始维护另一个 Docker 映像。两个选项都有警告。是否有任何其他方法可用于根据新的挂载路径重构卷?
【问题讨论】: