n1ro°
RU

Текст и данные · Инструкция

Docker volume read-only: как подключить том только для чтения

Docker volume read-only используют, когда контейнеру нужно читать данные, но нельзя разрешать их изменение. Docker поддерживает два эквивалентных варианта: --mount с readonly/ro и короткую запись -v volume:/path:ro. Один и тот же named volume при этом может быть доступен на запись другому контейнеру — read-only задаётся для конкретного mount.

Редакция N1RO · Проверено

Короткий ответ

Для read-only volume используйте --mount source=..,destination=..,readonly или краткую форму -v volume:/path:ro. Один и тот же volume может быть read-only в одном контейнере и writable в другом.

Контроль перед завершением

  • В Mounts нужного контейнера RW=false.
  • Приложение действительно не требует записи в этот путь.
  • Другие контейнеры с тем же volume проверены на режим доступа.

Docker volume ro: ключевой принцип

Read-only mount ограничивает запись со стороны конкретного контейнера, а не превращает сам volume навсегда в неизменяемый объект. Docker поддерживает флаг readonly в синтаксисе --mount и суффикс :ro в кратком -v. Один named volume можно подключить к нескольким контейнерам с разными режимами доступа.

Совет: Read-only mount ограничивает запись со стороны конкретного контейнера, а не превращает сам volume навсегда в неизменяемый объект.

Порядок действий

  1. Создайте или выберите named volume и убедитесь, что в нём есть нужные данные.
  2. Запустите контейнер с --mount source=VOL,destination=/data,readonly либо -v VOL:/data:ro.
  3. Внутри контейнера прочитайте существующий файл и попробуйте создать тестовый файл.
  4. Проверьте docker inspect и убедитесь, что для mount отображается RW=false.
  5. Если сервису нужна запись в отдельный каталог, смонтируйте второй writable volume именно туда.

Совет: Создайте или выберите named volume и убедитесь, что в нём есть нужные данные.

Readonly volume docker: ограничения и ошибки

Ошибка записи при RW=false ожидаема и не требует chmod 777 внутри контейнера. Read-only полезен для конфигураций, справочников, моделей и других данных, которые процесс должен только читать. Это не защита от контейнера, который имеет другие привилегированные пути к хосту или Docker socket; модель безопасности нужно оценивать целиком. В связанных материалах и настройках встречаются также термины: volume only read, Docker volume permissions.

Предупреждение: Это не защита от контейнера, который имеет другие привилегированные пути к хосту или Docker socket; модель безопасности нужно оценивать целиком.

Практический нюанс

Read-only не означает, что данные защищены от других контейнеров. Если второй контейнер монтирует тот же volume в режиме read-write, он всё равно способен изменить файлы, которые первый контейнер видит только для чтения.

Что проверить в реальном сценарии

Если приложению нужен read-only dataset, вынесите кэш, PID-файлы и временные данные в другой writable path. Тогда `:ro` защищает основной volume от записи, а контейнер не ломается из-за попытки создать служебный файл рядом с данными.

Как убедиться, что задача решена

Проверьте mount командой docker inspect и убедитесь, что у нужной записи RW=false. Практический тест — попытаться создать файл именно в смонтированном каталоге из контейнера: операция должна завершиться ошибкой read-only filesystem или permission denied в зависимости от окружения. Не путайте read-only volume с флагом --read-only, который делает только корневую файловую систему контейнера read-only и решает другую задачу.

Важно: Не используется chmod как обход read-only

Что учитывать

Ошибка записи при RW=false ожидаема и не требует chmod 777 внутри контейнера. Read-only полезен для конфигураций, справочников, моделей и других данных, которые процесс должен только читать. Это не защита от контейнера, который имеет другие привилегированные пути к хосту или Docker socket; модель безопасности нужно оценивать целиком. В связанных материалах и настройках встречаются также термины: volume only read, Docker volume permissions.

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. Volumes). Пример и формулировки — редакция N1RO на 2026-09-23.