Docker Compose Watch vs bind mount: синхронизация кода

Категория: docker · Язык: YAML · Обновлено:

Compose Watch синхронизирует исходники в уже запущенный контейнер, а изменения зависимостей запускают пересборку. Для разработки это позволяет не монтировать весь каталог через bind mount и не подменять Linux-зависимости контейнера пакетами с хоста, особенно в Node.js-проекте.

Настроить синхронизацию и пересборку

Добавьте правила в compose.yaml. Синхронизируется только папка src, а изменения package.json и lock-файла пересобирают образ:

YAML
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

Запустите проект с наблюдением за файлами:

Bash
docker compose up --watch

Compose 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.