--- created: '2026-04-15T18:11:45+00:00' id: 9ee96ac8-e1ff-4946-b08f-680be1d1b2bb keywords: - docker compose - compose.yaml - compose.yml - docker-compose - multi-container - services - networks - volumes - build - environment variables - depends_on - docker documentation - compose specification - configs - secrets - deploy - healthcheck - docker compose up - docker compose down - docker compose build - docker compose watch links: [] modified: '2026-04-15T18:11:45+00:00' summary: Comprehensive reference for Docker Compose covering the Compose file specification (compose.yaml), all top-level elements (services, networks, volumes, configs, secrets), key CLI commands, build specification, environment variable interpolation, and usage examples. Derived from official Docker documentation (docs.docker.com). tags: - reference - docker - compose - containers - devops - orchestration title: Docker Compose Reference --- # Docker Compose Reference ## Overview Docker Compose is a tool for defining and running multi-container applications. You use a YAML configuration file (`compose.yaml`) to configure your application's services, networks, and volumes. Then with a single command (`docker compose up`), you create and start all services from your configuration. Compose works in all environments: production, staging, development, testing, and CI workflows. It manages the whole lifecycle: start, stop, rebuild, view status, stream logs, run one-off commands. > **Source:** Official Docker Compose documentation — https://docs.docker.com/compose/ | https://docs.docker.com/reference/compose-file/ | Fetched: July 2025 --- ## Compose File (`compose.yaml`) | Aspect | Detail | |---|---| | **Default path** | `compose.yaml` (preferred) or `compose.yml` | | **Legacy paths** | `docker-compose.yaml` and `docker-compose.yml` (backwards compatibility) | | **Conflict resolution** | If both canonical and legacy exist, Compose prefers `compose.yaml` | | **Merging** | Multiple Compose files can be merged; simple attributes are overridden by the highest-order file, lists are merged by appending | | `include` | Reference other Compose files from different teams | | `extends` | Share common configurations among services (supports `file` and `service` keys) | --- ## Top-Level Elements The Compose Specification defines the following top-level elements: ### `services` (required) A map whose keys are service names and values are service definitions. Key service attributes include: #### Core | Attribute | Description | |---|---| | `image` | Docker image to use | | `build` | Build config (context, dockerfile, args, target, cache_from/cache_to, tags, secrets, ssh, network, no_cache, platforms, etc.) | | `command` | Overrides default CMD from image | | `entrypoint` | Overrides default ENTRYPOINT from image | | `container_name` | Custom container name (prevents scaling) | | `hostname` | Custom hostname (must be valid RFC 1123) | | `domainname` | Custom domain name | #### Networking | Attribute | Description | |---|---| | `ports` | Publish ports (`HOST:CONTAINER` format) | | `expose` | Expose ports to linked services only (not published to host) | | `networks` | Networks to join | | `network_mode` | Special network mode (`host`, `none`, `service:name`) | | `dns` | Custom DNS servers | | `dns_opt` | DNS options | | `dns_search` | DNS search domains | | `extra_hosts` | Additional hostname mappings | #### Storage | Attribute | Description | |---|---| | `volumes` | Volume mounts (supports short and long syntax with `type`, `source`, `target`, `read_only`, etc.) | | `volumes_from` | Mount volumes from another service/container | | `tmpfs` | Temporary filesystem mounts | #### Dependencies & Ordering | Attribute | Description | |---|---| | `depends_on` | Control startup/shutdown order. **Short syntax**: service names. **Long syntax**: `condition` (`service_started`, `service_healthy`, `service_completed_successfully`), `required` (bool), `restart` (bool) | #### Configuration & Secrets | Attribute | Description | |---|---| | `environment` | Container environment variables (map or array syntax) | | `env_file` | Files containing environment variables (supports `required` and `format` attributes) | | `configs` | Grant access to configs (short or long syntax with `source`, `target`, `uid`, `gid`, `mode`) | | `secrets` | Grant access to secrets (short or long syntax) | #### Resource Limits | Attribute | Description | |---|---| | `cpu_count`, `cpu_percent`, `cpu_shares` | CPU allocation controls | | `cpu_period`, `cpu_quota` | CPU throttling | | `cpu_rt_runtime`, `cpu_rt_period` | Real-time CPU scheduling | | `cpus`, `cpuset` | CPU count and affinity | | `mem_limit`, `mem_reservation` | Memory limits | | `mem_swappiness`, `memswap_limit` | Swap controls | | `blkio_config` | Block I/O limits (`weight`, `weight_device`, `device_read/write_bps`, `device_read/write_iops`) | | `pids_limit` | Process ID limit | #### Health & Lifecycle | Attribute | Description | |---|---| | `healthcheck` | Container health check configuration | | `restart` | Restart policy (`no`, `always`, `on-failure`, `unless-stopped`) | | `stop_grace_period` | Grace period before SIGKILL | | `stop_signal` | Signal to send on stop | | `init` | Run an init process inside the container | | `post_start`, `pre_stop` | Lifecycle hooks | #### Security & Isolation | Attribute | Description | |---|---| | `cap_add`, `cap_drop` | Linux capabilities | | `security_opt` | Security options | | `privileged` | Give full access to host | | `read_only` | Read-only root filesystem | | `user` | Username/UID | | `group_add` | Additional groups | | `userns_mode` | User namespace mode | | `cgroup`, `cgroup_parent` | Cgroup settings | | `isolation` | Container isolation technology | | `devices` | Device mappings | | `device_cgroup_rules` | Device cgroup rules | #### Logging | Attribute | Description | |---|---| | `logging` | Logging configuration with `driver` and `options` | #### Other | Attribute | Description | |---|---| | `labels` | Metadata labels | | `annotations` | Container annotations | | `scale` | Scale to N containers | | `profiles` | Service profiles for selective startup | | `platform` | Target platform | | `pull_policy` | Image pull policy | | `runtime` | Container runtime | | `shm_size` | Shared memory size | | `stdin_open`, `tty` | Interactive mode | | `ulimits` | System ulimit settings | | `sysctls` | Kernel parameters | | `working_dir` | Working directory inside container | | `extends` | Extend another service's configuration | | `deploy` | Deployment config (`replicas`, `update_config`, `rollback_config`, `resources`, `restart_policy`, `placement`, `labels`, `mode`) | | `develop` | Development config (Compose Watch) | | `models` | AI model configuration (Compose Model Runner) | --- ### `networks` Define named networks for service communication. | Attribute | Description | |---|---| | `driver` | `bridge` (default), `overlay`, `host`, `none`, or custom | | `driver_opts` | Driver-specific options | | `attachable` | Allow standalone containers to attach (for overlay networks) | | `external` | Reference an existing network | | `internal` | No external connectivity | | `enable_ipv4`, `enable_ipv6` | IP version support | | `ipam` | Custom IPAM config (`driver`, `config` with `subnet`/`ip_range`/`gateway`/`aux_addresses`, `options`) | | `labels` | Metadata | | `name` | Custom network name | > **Default network:** When no networks are declared, Compose creates an implicit `default` network. All services without explicit `networks` join it. --- ### `volumes` Define named volumes for persistent data. | Attribute | Description | |---|---| | `driver` | Volume driver | | `driver_opts` | Driver-specific options (e.g., NFS config) | | `external` | Reference an existing volume | | `labels` | Metadata | | `name` | Custom volume name | --- ### `configs` Runtime configuration data mounted as files into containers. | Attribute | Description | |---|---| | `file` | File containing config content | | `external` | Reference existing config | | `name` | Custom name | | `labels` | Metadata | --- ### `secrets` Sensitive data (passwords, keys, certificates) mounted as files. | Attribute | Description | |---|---| | `file` | File containing secret content | | `external` | Reference existing secret | | `name` | Custom name | | `labels` | Metadata | --- ### `name` (top-level) Project name used to group and isolate resources. --- ## Key Commands | Command | Description | |---|---| | `docker compose up` | Create and start all services | | `docker compose up -d` | Run in detached (background) mode | | `docker compose down` | Stop and remove containers, networks | | `docker compose down --volumes` | Also remove volumes | | `docker compose build` | Build or rebuild services | | `docker compose start` | Start existing services | | `docker compose stop` | Stop services (without removing) | | `docker compose restart` | Restart services | | `docker compose ps` | List running services and their status | | `docker compose logs` | View service logs | | `docker compose exec` | Execute command in running container | | `docker compose run` | Run a one-off command on a service | | `docker compose config` | Validate and view the Compose file | | `docker compose pull` | Pull service images | | `docker compose push` | Push service images | | `docker compose watch` | Watch for file changes and sync (development) | | `docker compose scale` | Scale services | --- ## Compose Build Specification The `build` section defines how to build images from source: | Attribute | Description | |---|---| | `context` | Build context path or Git URL | | `dockerfile` / `dockerfile_inline` | Alternate Dockerfile | | `args` | Build arguments (ARG values) | | `target` | Multi-stage build target | | `cache_from`, `cache_to` | Build cache sources/targets | | `secrets` | Build-time secrets | | `ssh` | SSH authentication for builds | | `network` | Network for RUN instructions | | `no_cache` | Disable cache | | `tags` | Additional image tags | | `platforms` | Target platforms | | `additional_contexts` | Named build contexts | | `labels` | Image labels | | `ulimits` | Build ulimits | | `entitlements`, `privileged`, `isolation` | Security settings | | `provenance`, `sbom` | Attestation settings | | `shm_size` | Shared memory for build | --- ## Environment Variables & Interpolation - Variables in `compose.yaml` use `${VARIABLE:-default}` syntax - `env_file` loads from files; `environment` takes precedence - `.env` file in project directory provides default values - Compose-specific variables: `COMPOSE_PROJECT_NAME`, `COMPOSE_FILE`, `COMPOSE_PROFILES`, `COMPOSE_PATH_SEPARATOR`, etc. --- ## Quickstart Example ```yaml services: web: build: . ports: - "5000:5000" volumes: - .:/code environment: FLASK_ENV: development redis: image: "redis:alpine" ``` --- ## Advanced Example ```yaml services: frontend: image: example/webapp ports: - "443:8043" networks: - front-tier - back-tier configs: - httpd-config secrets: - server-certificate backend: image: example/database volumes: - db-data:/etc/data networks: - back-tier volumes: db-data: driver: flocker driver_opts: size: "10GiB" configs: httpd-config: external: true secrets: server-certificate: external: true networks: front-tier: {} back-tier: {} ```