Docker Compose, как удалить данные монтирования привязки?

Я создаю базу данных PostgreSQL с помощью Docker Compose в Debian 11.

  • Docker version 20.10.14, build a224086
  • Docker Compose version v2.3.3

Когда я пытаюсь выключить Docker Compose и удалить все существующие данные, я не могу избавиться от привязанных данных.

докер-compose.yml

version: '3'

services:
  postgres:
    image: postgres:9.3.25
    healthcheck:
      test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
      timeout: 45s
      interval: 10s
      retries: 10
    restart: always
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=docker
      - APP_DB_USER=app_user
      - APP_DB_PASS=docker
      - APP_DB_NAME=myapp_db
    # Notice this creates bind mounts, not volumes!
    volumes:
      - ./db-entry-point:/docker-entrypoint-initdb.d/
      - ./postgres-db-data:/var/lib/postgresql/data
    ports:
      - 5432:5432

Приведенная ниже команда выдается для выключения контейнеров докеров. Я знаю, что по умолчанию тома не удаляются. Аргумент --volumes можно использовать для удаления томов, но я проверил, что он не удаляет данные привязки.

docker compose -f /opt/storage/disk-03/docker/myapp-db/docker-compose.yml down

Эти файлы находятся в целевом каталоге монтирования привязки:

ls -la /opt/storage/disk-03/docker/myapp-db/postgres-db-data/
total 44
drwx------ 15 systemd-timesync root               329 Mar 29 09:52 .
drwxr-xr-x  4 root             root                78 Mar 29 09:35 ..
-rw-------  1 systemd-timesync systemd-timesync     4 Mar 28 14:52 PG_VERSION
drwx------  7 systemd-timesync systemd-timesync    67 Mar 28 14:52 base
drwx------  2 systemd-timesync systemd-timesync  4096 Mar 29 09:51 global
drwx------  2 systemd-timesync systemd-timesync    18 Mar 28 14:52 pg_clog
-rw-------  1 systemd-timesync systemd-timesync  4486 Mar 28 14:52 pg_hba.conf
-rw-------  1 systemd-timesync systemd-timesync  1636 Mar 28 14:52 pg_ident.conf
drwx------  4 systemd-timesync systemd-timesync    36 Mar 28 14:52 pg_multixact
drwx------  2 systemd-timesync systemd-timesync    18 Mar 29 09:50 pg_notify
drwx------  2 systemd-timesync systemd-timesync     6 Mar 28 14:52 pg_serial
drwx------  2 systemd-timesync systemd-timesync     6 Mar 28 14:52 pg_snapshots
drwx------  2 systemd-timesync systemd-timesync   105 Mar 29 09:52 pg_stat
drwx------  2 systemd-timesync systemd-timesync     6 Mar 29 09:52 pg_stat_tmp
drwx------  2 systemd-timesync systemd-timesync    18 Mar 28 14:52 pg_subtrans
drwx------  2 systemd-timesync systemd-timesync     6 Mar 28 14:52 pg_tblspc
drwx------  2 systemd-timesync systemd-timesync     6 Mar 28 14:52 pg_twophase
drwx------  3 systemd-timesync systemd-timesync    60 Mar 28 14:52 pg_xlog
-rw-------  1 systemd-timesync systemd-timesync 20120 Mar 28 14:52 postgresql.conf
-rw-------  1 systemd-timesync systemd-timesync    37 Mar 29 09:50 postmaster.opts

Я не знаю, как удалить эти файлы, так как rm -rf не удаляет их. ls -la /opt/storage/disk-03/docker/myapp-db/postgres-db-data/ по-прежнему перечисляет файлы.

sudo rm -rf /opt/storage/disk-03/docker/myapp-db/postgres-db-data/*

Как правильно с точки зрения Докера удалить эти файлы?

/bin/rm должно быть правильно; Docker не будет вносить никаких изменений в смонтированные файлы хоста. (Обратите внимание, что Docker не различает сценарии инициализации, которые вы не хотите удалять, от хранилища базы данных, которое вы делаете; оба монтируют некоторый путь хоста в контейнер по некоторому пути.)
David Maze 29.03.2022 12:52

Ах да, имеет смысл, что скрипты инициализации не удаляются.

Eastman 29.03.2022 13:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что файлы можно удалить, сначала изменив владельца файлов, а затем удалив их. Я не уверен, что происходит в базовой ОС, но я проверял это пару раз, и это работает.

# This doesn't remove the files when files are owned by "systemd-timesync"
sudo rm -rf /opt/storage/disk-03/docker/myapp-db/postgres-db-data/*

# chown to admin user
sudo chown -R admin. /opt/storage/disk-03/docker/myapp-db/postgres-db-data/
# Now removal works
sudo rm -rf /opt/storage/disk-03/docker/myapp-db/postgres-db-data/*

Другие вопросы по теме