Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
read-only-fs Linux / DevOps

Docker Error: read-only file system encountered inside container

Обновлено: 19.08.2026  ·  Официальная база знаний

Механизм защиты VFS и причины перехода файловой системы в режим Read-Only

Ошибка cannot touch: Read-only file system или EROFS: read-only file system возвращается кодом ошибки ядра EROFS (Error 30) при попытке процесса выполнить системный вызов записи (write, mkdir, unlink). Это происходит в трех основных случаях: контейнер явно запущен с флагом --read-only для безопасности, том (Volume / Bind Mount) смонтирован с атрибутом :ro, либо базовая файловая система хоста (ext4/xfs) была принудительно переведена ядром Linux в режим Read-Only из-за сбоя оборудования (I/O hardware error, bad blocks, filesystem corruption).

Бизнес-риски:

Аварийная остановка баз данных (PostgreSQL, MySQL), потеря пользовательских сессий, сбой записи транзакционных логов и повреждение целостности данных.

Таблица сценариев монтирования и прав на запись

Параметр запускаСостояние корневой ФС (/)Состояние томов (/data)
Стандартный запускRead-Write (Слой контейнера overlay2)Read-Write (Зависит от прав хоста)
--read-onlyRead-Only (Любая запись блокируется)Read-Write (Если явно указан volume)
-v /host:/cont:roRead-WriteRead-Only (Принудительно запрещена запись)

Пошаговое восстановление прав на запись в контейнере

Сценарий 1: Исправление флагов монтирования в docker run / compose

Проверьте параметры монтирования и снимите флаг :ro, если приложению требуется запись:

# Исправленный запуск с правами на запись (:rw по умолчанию):
docker run -d -v /data/storage:/app/storage:rw myimage

# В docker-compose.yml:
services:
  app:
    volumes:
      - ./storage:/app/storage:rw

Сценарий 2: Настройка tmpfs при использовании безопасного флага --read-only

Если в целях hardening контейнер работает с --read-only rootfs, выделите временные разделы в RAM для логов и PID:

# Запуск безопасного контейнера с записью временных файлов в память (tmpfs)
docker run -d \
  --read-only \
  --tmpfs /tmp \
  --tmpfs /var/run \
  --tmpfs /var/log \
  -v app_data:/app/data:rw \
  nginx:alpine

Сценарий 3: Проверка хостовой файловой системы на ошибки и аварийный remount

Если режим Read-Only включился спонтанно на работающем контейнере, проверьте системный журнал ядра хоста:

# Проверка dmesg на критические ошибки диска
dmesg -T | grep -E 'EXT4-fs error|XFS|I/O error|remount'

# Если диск ушел в RO из-за ошибок, требуется остановка и fsck:
systemctl stop docker
umount /dev/sdb1
fsck.ext4 -y /dev/sdb1
mount /dev/sdb1 /var/lib/docker
systemctl start docker

Типовые ошибки администраторов

  • Попытка сменить права через chmod внутри Read-Only ФС: Команда chmod или chown внутри контейнера завершится той же ошибкой EROFS. Права меняются на хосте.
  • Игнорирование SMART-атрибутов диска: Спонтанный remount в RO — первый признак деградации SSD/HDD или сбоя контроллера RAID.
Файловые системы серверов падают в Read-Only под высокой нагрузкой?
ITSTM проведет аппаратную диагностику дисковых массивов, настроит мониторинг SMART/I/O и обеспечит целостность ваших данных.
Практический опыт инженера: Всегда настраивайте параметр ядра Linux errors=remount-ro в /etc/fstab для корневого раздела, но для разделов с базами данных Docker используйте выделенные тома с непрерывным мониторингом задержек дисковой очереди.

Частые вопросы (FAQ)

Почему база данных PostgreSQL в контейнере внезапно упала в Read-Only?

Служба PostgreSQL при обнаружении ошибок записи на диск немедленно переводит транзакции в Read-Only для защиты от повреждения данных WAL.

Как смонтировать только один файл с правами на запись, а остальные на чтение?

Монтируйте директорию как :ro, а конкретный целевой файл отдельной строкой: -v /host/app.conf:/app/app.conf:rw.

Влияют ли права пользователя (UID/GID) на ошибку Read-only file system?

Нет. При ошибке прав доступа возвращается Permission denied (EACCES). Ошибка EROFS связана исключительно с параметрами монтирования ядра.

Как временно перемонтировать файловую систему в RW без перезагрузки?

На хосте выполните: mount -o remount,rw /mount/point. Если ядро заблокировало диск из-за ошибок, перемонтирование будет отклонено.