Legend
- ✅ Supported - Feature works as documented
- ⚠️ Limited - Partial support or with restrictions
- ❌ Not supported - Feature is not available
Services
| Feature | Status | Notes |
|---|---|---|
build | ✅ | Build context and Dockerfile |
cap_add | ✅ | Add Linux capabilities |
cap_drop | ✅ | Drop Linux capabilities |
command | ✅ | Override container command |
configs | ✅ | File-based and inline configs |
cpus | ✅ | CPU limit (shorthand for deploy.resources.limits.cpus) |
depends_on | ⚠️ | Services deployed in order, but conditions not checked |
devices | ✅ | Device mappings |
dns | ❌ | Use built-in service discovery |
dns_search | ❌ | Use built-in service discovery |
entrypoint | ✅ | Override container entrypoint |
env_file | ✅ | Load environment variables from file |
environment | ✅ | Environment variables |
gpus | ✅ | GPU device access |
healthcheck | ✅ | Health check configuration |
image | ✅ | Container image specification |
init | ✅ | Run init process in container |
labels | ❌ | Not supported |
links | ❌ | Use service names for communication |
logging | ✅ | Defaults to local driver |
mem_limit | ✅ | Memory limit (shorthand for deploy.resources.limits.memory) |
mem_reservation | ✅ | Memory reservation (shorthand for deploy.resources.reservations.memory) |
mem_swappiness | ❌ | Not supported |
memswap_limit | ❌ | Not supported |
networks | ❌ | All containers share cluster network |
ports | ⚠️ | Standard ports limited to mode: host, use x-ports for HTTP/HTTPS |
privileged | ✅ | Run containers in privileged mode |
pull_policy | ✅ | Supports always, missing, never |
scale | ✅ | Number of replicas (shorthand for deploy.replicas) |
secrets | ❌ | Use configs or environment variables instead |
security_opt | ❌ | Not supported |
stop_grace_period | ✅ | Time to wait after SIGTERM before SIGKILL |
storage_opt | ❌ | Not supported |
sysctls | ✅ | Namespaced kernel parameters |
ulimits | ✅ | User limits (nofile, nproc, etc.) |
user | ✅ | Set container user |
volumes | ✅ | Named volumes, bind mounts, tmpfs |
Deploy
| Feature | Status | Notes |
|---|---|---|
mode | ✅ | global or replicated |
replicas | ✅ | Number of container replicas |
placement | ❌ | Use x-machines extension instead |
resources | ⚠️ | CPU and memory limits/reservations, device reservations |
restart_policy | ❌ | Defaults to unless-stopped |
rollback_config | ❌ | Not yet implemented |
update_config | ⚠️ | Supports order and monitor |
labels | ❌ | Not supported |
Resources
| Feature | Status | Notes | |--------------------------------|--------|------------------------------------------------------------|| |resources.limits.cpus | ✅ | CPU core limit |
| resources.limits.memory | ✅ | Memory limit |
| resources.reservations.memory| ✅ | Memory reservation (guaranteed) |
| resources.reservations.devices| ✅ | GPU and device reservations |
Volumes
| Feature | Status | Notes | |-----------------|--------|------------------------------------------------------------|| | Named volumes | ✅ | Docker volumes withlocal driver |
| Bind mounts | ✅ | Host path binding |
| Tmpfs mounts | ✅ | In-memory filesystems |
| Volume labels | ✅ | Custom metadata labels |
| External volumes| ✅ | Must exist before deployment |
| Volume drivers | ⚠️ | Only local driver supported |
Configs
| Feature | Status | Notes | |-------------------|--------|------------------------------------------------------------|| | File-based configs| ✅ | Read config from file | | Inline configs | ✅ | Define config content in compose.yaml | | External configs | ❌ | Not supported | | Short syntax | ❌ | Must use long syntax | |uid/gid | ✅ | Set config file ownership |
| mode | ✅ | Set config file permissions |
Uncloud extensions
| Extension | Status | Purpose | |--------------|--------|------------------------------------------------------------|| |x-ports | ✅ | Publish HTTP/HTTPS via Caddy or TCP/UDP via host mode |
| x-caddy | ✅ | Custom Caddy reverse proxy configuration |
| x-machines | ✅ | Machine placement constraints |
x-ports
Publish service ports via Caddy reverse proxy or bind directly to host:- Ingress mode (HTTP/HTTPS):
[hostname:][published_port:]container_port/protocol - Host mode (TCP/UDP):
[host_ip:]host_port:container_port/protocol@host
- Ingress:
http,https - Host:
tcp,udp
When you specify a hostname with HTTPS, Uncloud automatically obtains a TLS certificate via Let’s Encrypt.
pkg/api/port.go, website/docs/8-compose-file-reference/1-support-matrix.md:82-94
x-caddy
Custom Caddy configuration for advanced reverse proxy features:{{ upstreams PORT }} template expands to all container IPs and the specified port.
x-caddy and x-ports with ingress mode are mutually exclusive. Use one or the other, not both.website/docs/8-compose-file-reference/1-support-matrix.md:96-111
x-machines
Constrain which machines can run your service:If you specify a machine that doesn’t exist, Uncloud ignores it and uses only the existing machines.
website/docs/8-compose-file-reference/1-support-matrix.md:112-127
Not yet supported
These features are not currently supported but may be added in the future:- Secrets - Use configs with restrictive permissions or environment variables
- Custom networks - All services share the cluster network
- Depends_on conditions - Only startup order is respected
- Rollback configuration - Manual rollback required
- Network storage drivers - Only local volumes supported
- Labels - Not used in Uncloud
- DNS settings - Built-in service discovery handles this
Complete example
Here’s a compose.yaml using many supported features:pkg/client/compose/testdata/compose-full-spec.yaml