我使用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映像。两种选择都有警告。是否有其他方法可用于基于新的安装路径来重组卷?
我使用Postgres:11 docker映像已有一段时间,直到我注意到在我的持久卷装载“ pg-data”(目标:“ / var / lib / postgresql / data / pgdata”)旁边,还有一个未命名的...
这里发生的是Dockerfile正在为您创建一个匿名卷