Текст и данные · Инструкция
Как ограничить размер Docker tmpfs и задать mode
Ограничить размер Docker tmpfs полезно, чтобы временные данные в памяти не росли бесконтрольно. Для --mount применяются tmpfs-size и tmpfs-mode, а у --tmpfs доступны опции size и mode. Важно учитывать второй предел: память tmpfs засчитывается в memory cgroup контейнера, поэтому большой size не расширяет --memory.
Короткий ответ
Для --mount type=tmpfs используйте tmpfs-size и tmpfs-mode; для --tmpfs доступны size и mode. Tmpfs хранится в памяти, исчезает после остановки контейнера и учитывается в лимите памяти контейнера.
Docker tmpfs-size: ключевой принцип
Tmpfs не хранит данные на диске и удаляется вместе с остановкой контейнера, поэтому подходит только для временных данных. Docker поддерживает tmpfs-size в байтах для --mount и параметр size для --tmpfs. tmpfs-mode задаёт файловые права, например 1770; по умолчанию используется world-writable режим 1777 в типичных настройках.
Важно: Tmpfs не хранит данные на диске и удаляется вместе с остановкой контейнера, поэтому подходит только для временных данных.
Порядок действий
- Оцените максимальный объём временных файлов приложения с запасом.
- Для --mount задайте type=tmpfs,dst=/path,tmpfs-size=<bytes>,tmpfs-mode=<octal>.
- Либо используйте --tmpfs /path:size=64m,mode=1770 для краткого синтаксиса.
- Установите реалистичный --memory и проверьте приложение под пиковым заполнением tmpfs.
- После остановки и нового запуска убедитесь, что приложение корректно переживает пустой временный каталог.
Совет: Оцените максимальный объём временных файлов приложения с запасом.
Tmpfs-mode docker: ограничения и ошибки
Использование tmpfs учитывается в memory cgroup контейнера, поэтому большой размер mount не даёт дополнительную RAM сверх --memory. Если размер не задан, документация Docker указывает высокий верхний предел по умолчанию, связанный с памятью хоста, поэтому явный limit безопаснее. Для секретов tmpfs снижает запись на постоянный диск, но не заменяет управление секретами и ограничение доступа к процессу. В связанных материалах и настройках встречаются также термины: tmpfs memory limit, Docker tmpfs permissions.
Предупреждение: Для секретов tmpfs снижает запись на постоянный диск, но не заменяет управление секретами и ограничение доступа к процессу.
Контроль перед завершением
- tmpfs-size/size задан в подходящих единицах.
- tmpfs-mode/mode соответствует нужным правам.
- Memory limit контейнера не меньше реального рабочего потребления с tmpfs.
Практический нюанс
Docker docs указывают, что без tmpfs-size максимальный размер tmpfs по умолчанию может составлять 50% RAM хоста. Это не рекомендация использовать столько памяти: реальный лимит приложения стоит задавать осознанно.
Что проверить в реальном сценарии
Размер tmpfs планируйте вместе с hard memory limit контейнера: временные файлы тоже потребляют память. Лимит tmpfs не должен становиться скрытым способом разрешить приложению вытеснить весь доступный объём RAM под кэш.
Как убедиться, что задача решена
После запуска контейнера найдите tmpfs в docker inspect и проверьте Destination. Затем запишите временный файл, убедитесь, что он помещается в заданный лимит, и удалите/остановите контейнер: содержимое tmpfs не должно пережить остановку. Если процесс получает OOM раньше size, смотрите --memory — tmpfs потребляет память того же cgroup и не предоставляет отдельный резерв RAM.
Важно: Приложение переживает потерю содержимого
Что учитывать
Использование tmpfs учитывается в memory cgroup контейнера, поэтому большой размер mount не даёт дополнительную RAM сверх --memory. Если размер не задан, документация Docker указывает высокий верхний предел по умолчанию, связанный с памятью хоста, поэтому явный limit безопаснее. Для секретов tmpfs снижает запись на постоянный диск, но не заменяет управление секретами и ограничение доступа к процессу. В связанных материалах и настройках встречаются также термины: tmpfs memory limit, Docker tmpfs…
Источники и проверка
Фактическая часть сверена по первичным источникам (в т.ч. tmpfs mounts). Пример и формулировки — редакция N1RO на 2026-09-23.