Skip to main content

Compose support matrix

Uncloud supports a subset of the Compose specification with some extensions and limitations. The following table shows the support status for main Compose features.

info

If you rely on a specific Compose feature that is not supported by Uncloud, please submit a feature request in GitHub Discussions or on Discord.

FeatureSupport StatusNotes
Services
build✅ SupportedBuild context and Dockerfile
cap_add✅ SupportedAdditional kernel capabilities
cap_drop✅ SupportedWhich kernel capabilities to drop
command✅ SupportedOverride container command
configs✅ SupportedFile-based and inline configs
cpus✅ SupportedCPU limit
depends_on⚠️ LimitedServices deployed in order but conditions not checked
devices✅ SupportedDevice mappings
dns❌ Not supportedBuilt-in service discovery
dns_search❌ Not supportedBuilt-in service discovery
entrypoint✅ SupportedOverride container entrypoint
env_file✅ SupportedEnvironment file
environment✅ SupportedEnvironment variables
gpus✅ SupportedGPU device access
healthcheck✅ SupportedHealth check configuration
image✅ SupportedContainer image specification
init✅ SupportedRun init process in container
labels❌ Not supported
links❌ Not supportedUse service names for communication
logging✅ SupportedDefaults to local log driver
mem_limit✅ SupportedMemory limit
mem_reservation✅ SupportedMemory reservation
mem_swappiness❌ Not supported
memswap_limit❌ Not supported
networks❌ Not supportedAll containers share cluster network
pid✅ SupportedSet the PID namespace mode, pid: host only
ports⚠️ Limitedmode: host only, use x-ports for HTTP/HTTPS
privileged✅ SupportedRun containers in privileged mode
pull_policy✅ Supportedalways, missing, never
secrets❌ Not supportedUse configs or environment variables
security_opt❌ Not supported
shm_size✅ SupportedShared memory size
stop_grace_period✅ SupportedTime to wait after SIGTERM before SIGKILL
storage_opt❌ Not supported
sysctls✅ SupportedNamespaced kernel parameters
ulimits✅ SupportedResource limits
user✅ SupportedSet container user
volumes✅ SupportedNamed volumes, bind mounts, tmpfs
Deploy
labels❌ Not supported
mode✅ SupportedEither global or replicated
placement❌ Not supportedUse x-machines extension
replicas✅ SupportedNumber of container replicas
resources⚠️ LimitedCPU, memory limits and device reservations
restart_policy❌ Not supportedDefaults to unless-stopped
rollback_config❌ Not supportedSee #151
update_config⚠️ Limitedorder and monitor supported. See rolling deployments
Volumes
Named volumes✅ SupportedDocker volumes
Bind mounts✅ SupportedHost path binding
Tmpfs mounts✅ SupportedIn-memory filesystems
Volume labels✅ SupportedCustom labels
External volumes✅ SupportedMust exist before deployment
Volume drivers✅ Supportedlocal (supports NFS, CIFS/Samba) and manually installed third-party drivers
Configs
File-based configs✅ SupportedRead from file
Inline configs✅ SupportedDefined in compose file
External configs❌ Not supportedNot supported
Short syntax❌ Not supportedUse long syntax only
Extensions
x-context✅ Uncloud-specificCluster context override
x-caddy✅ Uncloud-specificCustom Caddy configuration
x-machines✅ Uncloud-specificMachine placement constraints
x-ports✅ Uncloud-specificService port publishing

Legend

  • Supported: Feature works as documented
  • ⚠️ Limited: Partial support or with restrictions
  • Not supported: Feature is not (yet) available

Uncloud extensions

Uncloud provides several custom extensions to enhance the Compose experience:

x-context

Set the cluster context for all commands that use the Compose file, such as deploy, build, and logs. This is useful when you manage multiple clusters and want to make sure a Compose file is always deployed to the right one. No need to remember to manually switch clusters with uc ctx or --context.

x-context is a top-level key, not a service-level attribute.

x-context: prod

services:
web:
image: nginx

The --context and --connect flags take precedence over x-context. If you don't specify any of these, the current context from your Uncloud config (--uncloud-config) is used.

warning

If you share the Compose file with other users, make sure to use the same context name for the target cluster in your Uncloud configs.

x-ports

Expose HTTP/HTTPS service ports via the Caddy reverse proxy, or bind TCP/UDP ports directly to the host:

services:
web:
image: nginx
x-ports:
- 80/https
- example.com:80/https
- 8080:80/tcp@host

See Publishing services for more details.

x-caddy

Custom Caddy reverse proxy configuration for a service:

services:
web:
image: nginx
x-caddy: |
example.com {
reverse_proxy {{upstreams 80}}
}

See Publishing services for more details.

x-machines

Restrict which machines can run your service. If you deploy multiple replicas, Uncloud automatically spreads them across the specified machines.

services:
web:
image: nginx
x-machines:
- machine-1
- machine-2
# Short syntax for a single machine
# x-machines: machine-1