Я некоторое время использовал образ докера Postgres: 11, пока не заметил, что рядом с моим постоянным монтированием тома «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) для монтирования pg-data с флагом
--volume
и скопируйте его в другой именованный том с подпапкой «data», затем используйте новый именованный том с измененным путем монтирования на/var/lib/postgresql/data
Другой очевидной идеей было бы клонировать Dockerfile и создать новый без громкости.
Поскольку в этом томе содержится около 100 ГБ данных, вариант 1 будет довольно медленным. Вариант 2 будет означать сохранение другого образа Docker с этого момента. Оба варианта с оговорками. Есть ли другой доступный подход к реструктуризации томов на основе нового пути монтирования?