ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Docker Compose build: --no-cache, up --build и ошибка отсутствующего Buildx

Автор: · Обновлено

docker compose build собирает образы сервисов, а docker compose up создаёт или обновляет контейнеры. Эти фазы связаны, но их результат разный: после удачной сборки старый…

docker compose build собирает образы сервисов, а docker compose up создаёт или обновляет контейнеры. Эти фазы связаны, но их результат разный: после удачной сборки старый работающий контейнер может продолжать использовать прежний образ. Разберём команды на самостоятельном Compose-файле.

Проект с собственной сборкой

Создайте app.py и Dockerfile из урока Python-приложения, а рядом сохраните compose.yaml:

name: dk-compose-build
services:
  web:
    image: dk-compose-python:dev
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      GREETING: compose-built
    ports:
      - "127.0.0.1:18090:8000"

context определяет передаваемые файлы, dockerfile — рецепт внутри выбранного контекста. image задаёт имя результата. Изменение environment требует применения конфигурации контейнера; изменение файла, скопированного через COPY, требует новой сборки образа.

docker compose config
docker compose build web
docker compose up -d web
docker compose ps

Откройте http://127.0.0.1:18090/: ожидается JSON с compose-built. Если нужно видеть шаги сборки подробно, используйте docker compose --progress plain build web. Команда Compose build.

Что делает каждая комбинация

КомандаРезультат
docker compose build webСобирает образ; контейнеры не запускает
docker compose up -d --build webСначала собирает, затем запускает или пересоздаёт
docker compose build --no-cache webПовторяет сборку без кэша слоёв
docker compose build --pull --no-cache webДополнительно проверяет базовые образы
docker compose restart webПерезапускает текущий контейнер без новой сборки

docker compose build up трактует up как имя сервиса, а не вторую команду. Если сервиса up нет, получите ошибку. Для «build и up» используйте две команды либо up -d --build. В варианте без кэша сначала выполните docker compose build --no-cache web, затем docker compose up -d web: флаг no-cache относится к build. Параметры up.

Проверка, что код действительно обновился

Измените ответ app.py, запустите только docker compose build web и запросите страницу. Старый контейнер ещё может отдавать прежний ответ. После docker compose up -d web проверьте ответ заново. Если обновление не видно, сравните итоговую конфигурацию, текущую папку и docker compose images. Дополнительный bind mount на /app может скрывать код образа — тогда источник видимых файлов нужно искать в mounts.

Compose configured to build using Bake, but Buildx isn't installed

Сообщение Docker Compose is configured to build using Bake, but buildx isn't installed относится к инструментам сборки, а не к приложению. Bake — высокоуровневое описание сборок, которое выполняется через Buildx. Сначала проверьте:

docker compose version
docker buildx version
docker context show

Если buildx не найден, на Linux с официальным Docker apt-репозиторием нужен совместимый docker-buildx-plugin; на Desktop проверьте комплект установки и путь к CLI. Команды от обычного пользователя и через sudo могут находить разные плагины. Не устанавливайте случайный бинарник в системный путь, не проверив архитектуру и источник.

Посмотрите, не включён ли COMPOSE_BAKE в shell, .env или настройках CI. В версиях Compose, которые поддерживают переключение, диагностический запуск в Bash выглядит так: COMPOSE_BAKE=false docker compose build web. Это не установка Buildx и не долговременная замена актуальной поддерживаемой конфигурации. Проверьте результат и исправьте комплект инструментов. Переменные Compose, Bake и Compose.

Упражнение

Измените сначала GREETING, затем код ответа. Для каждого изменения заранее выберите минимальную нужную операцию и подтвердите её HTTP-запросом. Повторите сборку с кэшем и без него, сравнив строки журнала, а не только секунды. Завершите docker compose down. Объясните, почему no-cache не исправляет неверный build context и почему restart не заменяет применение нового образа.

Источники