Проблема с разрешениями при записи на SMB общий ресурс с Linux сервера

Вопрос или проблема

Вот моя настройка. У меня есть SMB-ресурс с именем пользователя, скажем, ‘nexus’ и установленным паролем. Я смонтировал его на экземпляр сервера Ubuntu с помощью следующей команды

sudo mount -t cifs //172.16.16.6/share /mnt/nas -o rw,user=nexus,uid=1000

У меня работает несколько контейнеров Docker, которые записывают в этот ресурс, и они, похоже, работают совершенно нормально. Все они управляются с помощью docker compose.

С тех пор я добавил новую службу в docker compose, которая делает дамп базы данных Postgres и записывает его в вышеупомянутый ресурс. Но этот контейнер выдает мне следующую ошибку

BACKUP_DIR указывает на файл или папку с недостаточными правами.

Переменная BACKUP_DIR — это указанный SMB-ресурс.

Следующая служба была добавлена в docker-compose.yml

  backup:
    container_name: db_dumper
    image: prodrigestivill/postgres-backup-local:14
    restart: always
    env_file:
      - .env
    environment:
      POSTGRES_HOST: database
      POSTGRES_CLUSTER: 'TRUE'
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      SCHEDULE: "30 23 * * *"
      POSTGRES_EXTRA_OPTS: '--clean --if-exists'
      BACKUP_DIR: /mnt/nas/nexus/app_data/backups/star_pg/
    volumes:
      - /mnt/nas/nexus/app_data/backups/star_pg:/db_dumps
    depends_on:
      - database

Я запускаю контейнеры с помощью sudo docker-compose up -d

Что я здесь упустил? Docker пытается получить доступ к монтированию от имени конкретного пользователя? Почему другие службы, запущенные с помощью этого же файла docker-compose, могут читать/записывать, а эта служба — нет?

Ответ или решение

У вас возникла проблема с правами доступа при записи в SMB-общую папку с вашего Linux-сервера. Давайте проанализируем ваш сценарий и выявим возможные причины и решения для устранения этой ошибки.

Ошибка доступа к SMB-шаре

Вы упомянули, что смогли монтировать SMB-шар с использованием команды:

sudo mount -t cifs //172.16.16.6/share /mnt/nas -o rw,user=nexus,uid=1000

Анализ конфигурации

  1. Права доступа на SMB-шаре:

    • Убедитесь, что пользователь nexus, с которым вы монтируете SMB-шар, имеет необходимые права на запись в директорию /share на сервере, где расположен SMB. Возможно, что разрешения на уровне сервера не позволяют этому пользователю записывать данные.
  2. Свойства монтирования:

    • При монтировании с помощью uid=1000, вы создаете привязку SMB-шара к локальному пользователю с UID 1000, что может не совпадать с UID пользователя внутри контейнера Docker, если контейнер запускается с другими настройками пользователя.

Контейнер и его окружение

Судя по вашему docker-compose.yml, вы добавили новый сервис, который использует переменную окружения BACKUP_DIR для указания директорий. Однако, если пользователь, под которым работает контейнер, не имеет прав на запись в /mnt/nas, это приведет к ошибке:

BACKUP_DIR points to a file or folder with insufficient permissions.

Основные моменты:

  • Контейнерные пользователи: Docker-контейнеры могут запускаться под различными пользователями. Вы можете проверить, под каким пользователем работает новый контейнер. Для этого можно использовать команду:

    docker exec -it db_dumper id
  • Маппинг UID и GID: Убедитесь, что UID и GID пользователя в контейнере соответствуют UID и GID, с которыми SMB-шар смонтирован. Если они отличаются, добавьте файлы в директорию, установив владельца на соответствующий UID и GID.

Рекомендации по устранению проблемы

  1. Проверка прав доступа:

    • Проверьте права доступа к директории на стороне SMB. Убедитесь, что у пользователя nexus есть права write.
  2. Контейнерные настройки:

    • Если необходимо, можете явно указать пользователя для контейнера, добавив следующий параметр в ваш docker-compose.yml:
    user: "1000:1000"

    Это гарантирует, что контейнер будет работать под тем же пользователем, что и непосредственно на сервере.

  3. Проверка прав на монтированной директории:

    • После монтирования, проверьте права на /mnt/nas/nexus/app_data/backups/star_pg/:
    ls -ld /mnt/nas/nexus/app_data/backups/star_pg/

    Обратите внимание на права и владельца директории.

  4. Логирование и отладка:

    • Проверьте логи контейнера на наличие дополнительных подсказок или ошибок. Это можно сделать с помощью команды:
    docker logs db_dumper

Заключение: Работая с SMB и Docker, важно следить за совпадением прав доступа и конфигурациями пользователей между хост-системой и контейнерами. Пошаговая проверка всех упомянутых аспектов должна помочь вам решить проблему доступа при записи в SMB-шар. Если после выполнения указанных действий проблема останется нерешенной, возможно, стоит обратиться к системным администраторам или воспользоваться специализированными форумами для получения дополнительной помощи.

Оцените материал
Добавить комментарий

Капча загружается...