obsidian/wiki/concepts/docker-compose-force-recreate.md
2026-05-14 21:09:52 +01:00

1.7 KiB

name description type
docker-compose-force-recreate docker compose up -d after build keeps the old container running unless --force-recreate is specified — new image is built but not used concept

Docker Compose — --force-recreate Required After Build

The Bug

docker compose build web
docker compose up -d        # ← old container still running

Even though the image was rebuilt, up -d without --force-recreate keeps the existing container if it's already running. Docker Compose detects "container is running and config hasn't changed" and skips recreation.

Result: new code is in the image but the running container has the old code.

The Fix

docker compose build web
docker compose up -d --force-recreate web

Or as a one-liner (rebuild + recreate):

docker compose up -d --build --force-recreate web

When Each Flag Is Needed

Command Effect
docker compose up -d Start stopped containers; skip running ones
docker compose up -d --force-recreate Recreate ALL containers (new image, updated config)
docker compose up -d --build Build image before starting, but may still skip recreation
docker compose up -d --build --force-recreate Full rebuild + recreate — safest for code changes
docker compose restart web Restart process inside existing container — does NOT apply new image

Deploy Script Pattern

#!/bin/bash
set -e
git pull
docker compose build web
docker compose up -d --force-recreate web
echo "Deployed."

Source: daily/2026-05-13.md | 2026-05-13