docker compose build buduje (albo przebudowuje) obrazy Dockera dla usług opisanych w pliku compose.yaml — tych, które mają sekcję build: zamiast samego image:. Innymi słowy: bierze Twoje Dockerfile i kontekst budowania zdefiniowane w composie i robi z nich gotowe obrazy, ale ich nie uruchamia. To etap „skompiluj”, zanim odpalisz docker compose up. Przydaje się, gdy chcesz zbudować obrazy z wyprzedzeniem, wymusić świeży build po zmianie kodu albo przygotować obrazy do wypchnięcia do rejestru.
Składnia i najważniejsze opcje
Podstawowa forma: docker compose build [OPTIONS] [SERVICE...]. Bez podania usług buduje wszystkie z sekcją build; możesz też wskazać konkretne, np. docker compose build api worker.
--no-cache— buduje bez cache, każda warstwa od zera. Ratuje, gdy Docker uparcie serwuje stary stan.--pull— zawsze próbuje pobrać nowszą wersję obrazu bazowego (FROM) zamiast brać lokalny.--build-arg KEY=VAL— przekazuje zmienną build-time doARGw Dockerfile.--push— po zbudowaniu wypycha obrazy do rejestru (wymaga ustawionych nazwimage).--no-cachei--pullłączą się — daje to najczystszy start budowy.-q, --quiet— nie wypisuje logów budowania, tylko ewentualne błędy.--progress STYLE— typ wyjścia:auto,tty,plain(to ostatnie pokazuje pełne logi, świetne do debugowania) alboquiet.--ssh— udostępnia agenta SSH buildowi (np. do klonowania prywatnego repo).
Przykłady użycia
docker compose build— buduje wszystkie usługi z sekcjąbuildwgcompose.yaml.docker compose build --no-cache api— przebudowuje tylko usługęapicałkowicie od zera.docker compose build --pull --no-cache— pobiera najnowsze obrazy bazowe i ignoruje cache, czyli pełny czysty build.docker compose build --build-arg NODE_ENV=production— buduje, podając argument odbierany przezARG NODE_ENV.docker compose build --progress plain web— budujewebz pełnymi, niezwijanymi logami, idealne gdy coś się sypie.
Częste błędy i pułapki
Najczęstsza wpadka: zmieniasz kod, robisz docker compose up i widzisz starą wersję. up nie przebudowuje obrazu, jeśli już istnieje — musisz dać docker compose up --build albo wcześniej build. Druga pułapka: --no-cache dotyczy tylko warstw Dockerfile, nie pobierze świeższego obrazu bazowego — do tego potrzebujesz --pull. Pamiętaj też o nowej składni: to docker compose (Compose V2, plugin), a nie stare docker-compose z myślnikiem — flagi bywają identyczne, ale to dwa różne narzędzia i stara wersja powoli odchodzi na emeryturę. I jeszcze klasyk: --push nie zadziała, jeśli usługa nie ma ustawionej nazwy image — nie ma gdzie wypchnąć.
Powiązane komendy: docker compose up --build, docker build, docker compose push, docker compose pull, docker compose config, docker images.