n1ro°
RU

Компьютеры · Инструкция

Docker Compose Watch: sync, restart или rebuild

Compose Watch позволяет связать тип изменения файла с нужным действием: только синхронизировать, синхронизировать и перезапустить или перестроить image. Правильный выбор резко сокращает цикл разработки.

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

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

Выбирайте `sync` для файлов, которые приложение умеет перечитать на лету; `sync+restart` — когда достаточно перезапустить процесс; `rebuild` — когда нужен новый image, например при изменении зависимостей.

Что важно знать про Docker Compose Watch

Compose Watch позволяет назначать разные actions разным paths. Это быстрее, чем перестраивать весь service при каждом сохранении, если правило соответствует поведению приложения. Docker приводит типичный принцип: исходный код для hot reload синхронизируется; runtime config может требовать restart; dependency manifest часто требует rebuild image.

Совет: Разделите code, runtime config и dependencies до написания watch rules.

Как выбрать action для каждого пути

  1. Разделите code, runtime config и dependencies.
  2. Для hot reload задайте sync.
  3. Для config-at-start задайте sync+restart.
  4. Для dependencies выберите rebuild.
  5. Добавьте ignore и проверьте target.
  6. Запустите `docker compose up --watch`.

Предупреждение: Не используйте rebuild для каждого save — это превращает Watch в дорогой полный цикл сборки.

Нюансы: rebuild и hot reload

Текущая Docker Docs указывает Compose 2.22.0 или новее для Watch. Пути относительно project directory, а правила ignore помогают не синхронизировать cache и служебные каталоги. Слишком широкий rebuild делает разработку медленной, а неверный target копирует файл не туда. Проверяйте каждое правило простым контролируемым изменением.

Важно: После изменения dependency manifest ожидайте rebuild, а не только копирование файла.

Пример: source, config и dependencies

React source → sync, nginx.conf → sync+restart, package.json → rebuild. В одном service допустимы разные rules.

Как выбрать action по типу файла

Исходники приложения с hot reload обычно достаточно sync. Конфиг, который читается только при старте process, требует sync+restart. Файлы зависимостей или Dockerfile меняют содержимое image — здесь нужен rebuild. Для одного service можно создать несколько watch rules, если пути и действия не пересекаются двусмысленно.

Как проверить Watch без угадывания

Измените по одному тестовому файлу каждого класса и наблюдайте ожидаемое действие. Если sync попал не в тот target или dependency не установилась, проблема видна сразу. Учитывайте `.dockerignore` и дополнительные `ignore`: Docker применяет правила исключения к наблюдаемым путям.

Как выбрать действие Compose Watch

  • исходный код при работающем hot reload. sync. файлы синхронизируются без пересборки образа
  • конфиг, который читается только при старте процесса. sync+restart. файл обновляется и сервис перезапускается
  • Dockerfile или зависимости образа. rebuild. образ пересобирается и сервис обновляется

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

Compose Watch позволяет назначать разные actions разным paths. Это быстрее, чем перестраивать весь service при каждом сохранении, если правило соответствует поведению приложения. Docker приводит типичный принцип: исходный код для hot reload синхронизируется; runtime config может требовать restart; dependency manifest часто требует rebuild image.

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

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