Skip to main content
The cpln stack command deploys Docker Compose projects directly to Control Plane, automatically converting services, volumes, secrets, and networks to their Control Plane equivalents.

When to use this

Migrate from Docker Compose

Move existing Compose projects to Control Plane without rewriting configuration

Local-to-cloud workflow

Develop locally with Compose, deploy to Control Plane for production

Multi-service apps

Deploy interconnected services as a cohesive stack

Preview deployments

Generate and inspect Control Plane manifests before deploying

Prerequisites

Install the Control Plane CLI. See Installation.
You need a docker-compose.yml or compose.yaml file.
You need permissions to create workloads, secrets, volumesets, identities, and push images.

Deploy a project

This reads your Compose file and deploys all services to Control Plane. See the stack deploy command reference for all options.

Delete a project

Remove all resources created by a Compose deployment:
See the stack rm command reference for details.

Preview the generated manifests

Generate Control Plane specs without deploying:
This outputs the converted YAML so you can inspect or modify it before deployment.

Customize workloads with x-cpln

Add an x-cpln block to any service to override the generated workload spec. Each top-level key in x-cpln replaces the corresponding section in the workload spec:
docker-compose.yml
The x-cpln block replaces entire spec sections, and doesn’t merge them. If you override containers, you must include all container configuration.

Available overrides

Service-to-service communication

Update service URLs to use the Control Plane local syntax:
Replace {GVC} with your actual GVC name.
See the Service-to-Service guide for the full endpoint syntax.

How workload type is determined

The converter analyzes your service definition to select the appropriate workload type:
Use x-cpln to override the automatically determined type if needed.

Translation reference

Resource mapping

Port protocol

Specify the protocol directly in the port string:

Defaults

Secrets and configs

Both secrets and configs are converted to Control Plane secrets:
  • Default mount path: /run/secrets/{name} (if no absolute path specified)
  • Identities and policies are automatically created for workloads using secrets

Healthcheck conversion

Docker healthchecks are converted to readiness probes: Supported test formats:
  • String: "curl http://localhost/health"/bin/sh -c wrapper
  • CMD: ['CMD', 'curl', 'http://localhost'] → direct execution
  • CMD-SHELL: ['CMD-SHELL', 'curl http://localhost']/bin/sh -c wrapper
  • NONE: Disables the readiness probe

Network modes

GPU support

Services with GPU devices are automatically configured:
GPU workloads receive:
  • NVIDIA T4 GPU
  • Minimum CPU: 2000m (overrides default)
  • Minimum Memory: 7168Mi (overrides default)
  • Capacity AI: Disabled

Service inheritance

Extend services from the same or different compose files:
Child values take precedence over parent values.

Limitations

The following Docker Compose features are not supported:

Troubleshooting

Update hostnames to use the Control Plane local syntax:
Ensure both services are in the same network or no networks are defined (global network).
Ensure all ports are explicitly listed in ports or expose in your Compose file. Only services with ports defined get external inbound access.
Secrets referenced in Compose are converted to Control Plane secrets. The converter automatically creates identities and policies. Check that:
  • The secret file exists at the specified path
  • You have permissions to create secrets, identities, and policies
Directory bind mounts are not supported. Convert to either:
  • Named volumes (for persistent data)
  • File bind mounts (for configuration files → converted to secrets)
A service cannot have both image and build specified. Use one or the other:
  • image: Pull from a registry
  • build: Build and push to Control Plane registry
By default, all services can reach each other. If you’re using named networks, ensure communicating services are in the same network.

Next steps

Apply YAML Manifests

Deploy resources from YAML files

Service-to-Service

Configure internal networking

Workload Reference

Understand workload configuration

Stack Command Reference

Full stack command reference