docker postgres не удалось изменить разрешения для pgdata - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть проект, в котором я использую Google Compute Engine для размещения моего приложения и docker для его контейнера.

У меня есть изображение postgres, и я хочу использовать том, чтобы сделать мои данные постоянными при перезапуске контейнера. Кроме того, я хочу, чтобы данные БД хранились в хранилище Google. Итак, у меня есть хранилище Google, и я подключил к нему каталог в моем Google Compute Engine. В частности, я сделал mkdir /home/vetter_leo/data, где data - это папка, которую я хочу использовать в качестве тома, и затем я монтирую ее, используя gcsfuse --dir-mode 777 --file-mode 777 -o allow_other --implicit-dirs artifacts.helenos-273112.appspot.com /home/vetter_leo/data/.

Мой dockerfile для образа postgres выглядит так:

FROM postgres:latest

USER postgres

ENV POSTGRES_USER helenos
ENV POSTGRES_PASSWORD helenos
ENV POSTGRES_DB helenos
ENV PGDATA /var/lib/postgresql/data/pgdata

COPY init_helenos_schema.sql /docker-entrypoint-initdb.d/

EXPOSE 5432

и мой docker -компонентный файл такой:

version: "3.5"

services:

  postgres:
    container_name: postgres
    image: postgres
    build:
      context: .
      dockerfile: ./postgres.prod.dockerfile
    volumes:
      - /home/vetter_leo/data:/var/lib/postgresql/data

networks:
  default:
    external:
      name: helenos-network

При выполнении docker-compose -f docker-compose.yml up -d --build я получаю контейнер, который не запускается, и эта ошибка отображается chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted.

Я искал в Интернете, но до сих пор не смог найти решение своей проблемы. Любая помощь будет принята с благодарностью. Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Этот подход не кажется оптимальным с точки зрения производительности и согласованности данных, поскольку, хотя монтирование gcsfuse претендует на то, чтобы быть полнофункциональной файловой системой, на самом деле это не так.

Основные отличия от файловой системы POSIX хорошо объяснены в официальной документации:

Ценообразование : Облачное хранилище FUSE - это, в конечном счете, облачное хранилище. Все передачи данных и операции, выполняемые Cloud Storage FUSE, сопоставляются с передачами и операциями Cloud Storage и оплачиваются соответствующим образом. Чтобы избежать неожиданностей, вы должны оценить, как ваше использование Cloud Storage FUSE будет переводиться в оплату Cloud Storage. Например, за каждую обычную операцию с объектом взимается плата (создание, удаление, список).

Производительность : задержка облачного хранилища FUSE намного выше, чем в локальной файловой системе.

• Небольшие случайные чтения выполняются медленно из-за задержки до первого байта ( не запускать базу данных через Cloud Storage FUSE! )

• Произвольные записи выполняются путем чтения во всем BLOB-объекте, редактируя его локально и записывая весь измененный BLOB-объект обратно в Cloud Storage.

Параллелизм : Нет контроля параллелизма для нескольких авторов в файл. Когда несколько авторов пытаются заменить файл, побеждает последняя запись, а все предыдущие записи теряются - слияния, контроля версий или уведомления пользователя о последующей перезаписи не происходит.

Доступ : Авторизация для файлов регулируется разрешениями Cloud Storage. Контроль доступа в стиле POSIX не работает.

Доступность : временные ошибки иногда возникают в распределенных системах, таких как облачное хранилище, что приводит к доступности менее 100%.

Текущее состояние из gcsfuse - это " beta ". Он распространяется как есть, без каких-либо гарантий. В этом состоянии это вряд ли применимо к любым производственным развертываниям.

Вместо этого лучше использовать постоянный диск для хранения данных.

Существует руководство для сообщества по настройке PostgreSQL в Compute Engine, которое рекомендует

Для повышения производительности и безопасности данных, установите ядро ​​базы данных на загрузочный диск, как показано в этом руководстве, а затем настройте хранилище данных на отдельном постоянном диске. Чтобы узнать, как добавить диск для вашей базы данных, см. Следующий учебник Как настроить новый постоянный диск для PostgreSQL Data .

0 голосов
/ 02 мая 2020

Я использовал постоянный диск, предложенный @ mebius99, и он работает, так что больше никаких проблем.

...