Перейти к основному содержимому
Версия: 2.4

Режим read-only root fs для контейнеров

В версии 2.1.0 для всех контейнеров включён режим read_only: true — корневая файловая система контейнера монтируется только для чтения.

Что изменилось​

Все встроенные компоненты Памир уже обновлены: конфигурации docker-compose.*.yml каждого сервиса содержат корректные tmpfs-монтирования и именованные тома для всех путей, куда процесс пишет данные во время работы.

Действий для встроенных компонентов не требуется.

Что требует внимания​

Пользовательские сервисы в docker-compose.additional.yml​

Если вы добавляли собственные сервисы или переопределяли встроенные — проверьте, что каждый процесс, которому нужна запись на диск, имеет соответствующий том или tmpfs.

Типичные точки записи:

ПутьРекомендуемый тип
Временные файлы, сокеты (/tmp, /run)tmpfs
Конфигурационные файлы, обновляемые конфигом (Redis + confd, docker-tool)Именованный том (volume)
Персистентные данныеИменованный том (volume)

Экспортеры с управлением конфигурацией через confd​

Если вы добавляли в docker-compose.additional.yml собственные экспортеры (аналогичные blackbox, snmp, json), конфигурация которых управляется через Redis + confd, — необходимо добавить именованный том для директории конфигурации.

Почему: confd при обновлении конфига атомарно переименовывает временный файл в целевой. При read_only: true это невозможно без записываемого тома на директорию конфигурации.

Важно: том должен быть смонтирован на директорию целиком, а не на отдельный файл. Только в этом случае Docker при первом запуске скопирует в том содержимое директории из образа (включая конфиг по умолчанию), и confd сможет обновить его из Redis.

Пример для docker-compose.additional.yml:

docker-compose.additional.yml
services:
blackbox-exporter:
volumes:
- type: volume
source: blackbox-exporter-config
target: /etc/blackbox_exporter

volumes:
blackbox-exporter-config:

Последовательность обновления​

  1. Обновите дистрибутив штатным способом через pamir-installer.

  2. Если в docker-compose.additional.yml есть пользовательские сервисы с записью на диск — добавьте соответствующие тома или tmpfs.

  3. Примените конфигурацию сервисов:

    pamirctl start
  4. Проверьте отсутствие ошибок в журналах:

    cd $HOME/.pamir
    docker compose logs --tail 200

    При ошибках вида read-only file system в каком-либо сервисе — добавьте в docker-compose.additional.yml именованный том или tmpfs для соответствующего пути записи и перезапустите сервис.