Docker Compose Watch vs bind mount: синхронизация кода
Compose Watch синхронизирует исходники в уже запущенный контейнер, а изменения зависимостей запускают пересборку. Для разработки это позволяет не монтировать весь каталог через bind mount и не подменять Linux-зависимости контейнера пакетами с хоста, особенно в Node.js-проекте.
Настроить синхронизацию и пересборку
Добавьте правила в compose.yaml. Синхронизируется только папка src, а изменения package.json и lock-файла пересобирают образ:
services:
web:
build: .
working_dir: /app
command: npm run dev
develop:
watch:
- action: sync
path: ./src
target: /app/src
- action: rebuild
path: package.json
- action: rebuild
path: package-lock.jsonЗапустите проект с наблюдением за файлами:
docker compose up --watchCompose Watch доступен начиная с Docker Compose 2.22.0 и предназначен для сервисов с build, а не только с готовым image. Папка node_modules остаётся внутри образа, поскольку правило наблюдает только src. Пользователь контейнера должен иметь право записи в target; образу также нужны stat, mkdir и rmdir. Для данных приложения и production используйте отдельное осознанное хранилище: file watch — режим разработки, а не замена volume или bind mount для runtime-данных. Не синхронизируйте node_modules: пакеты с нативными модулями могут зависеть от ОС и архитектуры хоста.
Документация: Compose Watch.