A self-hosted orchestration system crafted for power users. composia.xyz
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001{ "$schema": "https://json-schema.org/draft-07/schema", "$id": "compose_spec.json", "type": "object", "title": "Compose Specification", "description": "The Compose file is a YAML file defining a multi-containers based application.",
"properties": { "version": { "type": "string", "deprecated": true, "description": "declared for backward compatibility, ignored. Please remove it." },
"name": { "type": "string", "description": "define the Compose project name, until user defines one explicitly." },
"include": { "type": "array", "items": { "$ref": "#/definitions/include" }, "description": "compose sub-projects to be included." },
"services": { "type": "object", "patternProperties": { "^[a-zA-Z0-9._-]+$": { "$ref": "#/definitions/service" } }, "additionalProperties": false, "description": "The services that will be used by your application." },
"models": { "type": "object", "patternProperties": { "^[a-zA-Z0-9._-]+$": { "$ref": "#/definitions/model" } }, "description": "Language models that will be used by your application." },
"networks": { "type": "object", "patternProperties": { "^[a-zA-Z0-9._-]+$": { "$ref": "#/definitions/network" } }, "description": "Networks that are shared among multiple services." },
"volumes": { "type": "object", "patternProperties": { "^[a-zA-Z0-9._-]+$": { "$ref": "#/definitions/volume" } }, "additionalProperties": false, "description": "Named volumes that are shared among multiple services." },
"secrets": { "type": "object", "patternProperties": { "^[a-zA-Z0-9._-]+$": { "$ref": "#/definitions/secret" } }, "additionalProperties": false, "description": "Secrets that are shared among multiple services." },
"configs": { "type": "object", "patternProperties": { "^[a-zA-Z0-9._-]+$": { "$ref": "#/definitions/config" } }, "additionalProperties": false, "description": "Configurations that are shared among multiple services." } },
"patternProperties": { "^x-": {} }, "additionalProperties": false,
"definitions": { "service": { "type": "object", "description": "Configuration for a service.", "properties": { "develop": { "$ref": "#/definitions/development" }, "deploy": { "$ref": "#/definitions/deployment" }, "annotations": { "$ref": "#/definitions/list_or_dict" }, "attach": { "type": ["boolean", "string"] }, "build": { "description": "Configuration options for building the service's image.", "oneOf": [ { "type": "string", "description": "Path to the build context. Can be a relative path or a URL." }, { "type": "object", "properties": { "context": { "type": "string", "description": "Path to the build context. Can be a relative path or a URL." }, "dockerfile": { "type": "string", "description": "Name of the Dockerfile to use for building the image." }, "dockerfile_inline": { "type": "string", "description": "Inline Dockerfile content to use instead of a Dockerfile from the build context." }, "entitlements": { "type": "array", "items": { "type": "string" }, "description": "List of extra privileged entitlements to grant to the build process." }, "args": { "$ref": "#/definitions/list_or_dict", "description": "Build-time variables, specified as a map or a list of KEY=VAL pairs." }, "ssh": { "$ref": "#/definitions/list_or_dict", "description": "SSH agent socket or keys to expose to the build. Format is either a string or a list of 'default|<id>[=<socket>|<key>[,<key>]]'." }, "labels": { "$ref": "#/definitions/list_or_dict", "description": "Labels to apply to the built image." }, "cache_from": { "type": "array", "items": { "type": "string" }, "description": "List of sources the image builder should use for cache resolution" }, "cache_to": { "type": "array", "items": { "type": "string" }, "description": "Cache destinations for the build cache." }, "no_cache": { "type": ["boolean", "string"], "description": "Do not use cache when building the image." }, "additional_contexts": { "$ref": "#/definitions/list_or_dict", "description": "Additional build contexts to use, specified as a map of name to context path or URL." }, "network": { "type": "string", "description": "Network mode to use for the build. Options include 'default', 'none', 'host', or a network name." }, "provenance": { "type": ["string", "boolean"], "description": "Add a provenance attestation" }, "sbom": { "type": ["string", "boolean"], "description": "Add a SBOM attestation" }, "pull": { "type": ["boolean", "string"], "description": "Always attempt to pull a newer version of the image." }, "target": { "type": "string", "description": "Build stage to target in a multi-stage Dockerfile." }, "shm_size": { "type": ["integer", "string"], "description": "Size of /dev/shm for the build container. A string value can use suffix like '2g' for 2 gigabytes." }, "extra_hosts": { "$ref": "#/definitions/extra_hosts", "description": "Add hostname mappings for the build container." }, "isolation": { "type": "string", "description": "Container isolation technology to use for the build process." }, "privileged": { "type": ["boolean", "string"], "description": "Give extended privileges to the build container." }, "secrets": { "$ref": "#/definitions/service_config_or_secret", "description": "Secrets to expose to the build. These are accessible at build-time." }, "tags": { "type": "array", "items": { "type": "string" }, "description": "Additional tags to apply to the built image." }, "ulimits": { "$ref": "#/definitions/ulimits", "description": "Override the default ulimits for the build container." }, "platforms": { "type": "array", "items": { "type": "string" }, "description": "Platforms to build for, e.g., 'linux/amd64', 'linux/arm64', or 'windows/amd64'." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } ] }, "blkio_config": { "type": "object", "description": "Block IO configuration for the service.", "properties": { "device_read_bps": { "type": "array", "description": "Limit read rate (bytes per second) from a device.", "items": { "$ref": "#/definitions/blkio_limit" } }, "device_read_iops": { "type": "array", "description": "Limit read rate (IO per second) from a device.", "items": { "$ref": "#/definitions/blkio_limit" } }, "device_write_bps": { "type": "array", "description": "Limit write rate (bytes per second) to a device.", "items": { "$ref": "#/definitions/blkio_limit" } }, "device_write_iops": { "type": "array", "description": "Limit write rate (IO per second) to a device.", "items": { "$ref": "#/definitions/blkio_limit" } }, "weight": { "type": ["integer", "string"], "description": "Block IO weight (relative weight) for the service, between 10 and 1000." }, "weight_device": { "type": "array", "description": "Block IO weight (relative weight) for specific devices.", "items": { "$ref": "#/definitions/blkio_weight" } } }, "additionalProperties": false }, "cap_add": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "Add Linux capabilities. For example, 'CAP_SYS_ADMIN', 'SYS_ADMIN', or 'NET_ADMIN'." }, "cap_drop": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "Drop Linux capabilities. For example, 'CAP_SYS_ADMIN', 'SYS_ADMIN', or 'NET_ADMIN'." }, "cgroup": { "type": "string", "enum": ["host", "private"], "description": "Specify the cgroup namespace to join. Use 'host' to use the host's cgroup namespace, or 'private' to use a private cgroup namespace." }, "cgroup_parent": { "type": "string", "description": "Specify an optional parent cgroup for the container." }, "command": { "$ref": "#/definitions/command", "description": "Override the default command declared by the container image, for example 'CMD' in Dockerfile." }, "configs": { "$ref": "#/definitions/service_config_or_secret", "description": "Grant access to Configs on a per-service basis." }, "container_name": { "type": "string", "description": "Specify a custom container name, rather than a generated default name.", "pattern": "[a-zA-Z0-9][a-zA-Z0-9_.-]+" }, "cpu_count": { "oneOf": [{ "type": "string" }, { "type": "integer", "minimum": 0 }], "description": "Number of usable CPUs." }, "cpu_percent": { "oneOf": [ { "type": "string" }, { "type": "integer", "minimum": 0, "maximum": 100 } ], "description": "Percentage of CPU resources to use." }, "cpu_shares": { "type": ["number", "string"], "description": "CPU shares (relative weight) for the container." }, "cpu_quota": { "type": ["number", "string"], "description": "Limit the CPU CFS (Completely Fair Scheduler) quota." }, "cpu_period": { "type": ["number", "string"], "description": "Limit the CPU CFS (Completely Fair Scheduler) period." }, "cpu_rt_period": { "type": ["number", "string"], "description": "Limit the CPU real-time period in microseconds or a duration." }, "cpu_rt_runtime": { "type": ["number", "string"], "description": "Limit the CPU real-time runtime in microseconds or a duration." }, "cpus": { "type": ["number", "string"], "description": "Number of CPUs to use. A floating-point value is supported to request partial CPUs." }, "cpuset": { "type": "string", "description": "CPUs in which to allow execution (0-3, 0,1)." }, "credential_spec": { "type": "object", "description": "Configure the credential spec for managed service account.", "properties": { "config": { "type": "string", "description": "The name of the credential spec Config to use." }, "file": { "type": "string", "description": "Path to a credential spec file." }, "registry": { "type": "string", "description": "Path to a credential spec in the Windows registry." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "depends_on": { "oneOf": [ { "$ref": "#/definitions/list_of_strings" }, { "type": "object", "additionalProperties": false, "patternProperties": { "^[a-zA-Z0-9._-]+$": { "type": "object", "additionalProperties": false, "patternProperties": { "^x-": {} }, "properties": { "restart": { "type": ["boolean", "string"], "description": "Whether to restart dependent services when this service is restarted." }, "required": { "type": "boolean", "default": true, "description": "Whether the dependency is required for the dependent service to start." }, "condition": { "type": "string", "enum": [ "service_started", "service_healthy", "service_completed_successfully" ], "description": "Condition to wait for. 'service_started' waits until the service has started, 'service_healthy' waits until the service is healthy (as defined by its healthcheck), 'service_completed_successfully' waits until the service has completed successfully." } }, "required": ["condition"] } } } ], "description": "Express dependency between services. Service dependencies cause services to be started in dependency order. The dependent service will wait for the dependency to be ready before starting." }, "device_cgroup_rules": { "$ref": "#/definitions/list_of_strings", "description": "Add rules to the cgroup allowed devices list." }, "devices": { "type": "array", "description": "List of device mappings for the container.", "items": { "oneOf": [ { "type": "string" }, { "type": "object", "required": ["source"], "properties": { "source": { "type": "string", "description": "Path on the host to the device." }, "target": { "type": "string", "description": "Path in the container where the device will be mapped." }, "permissions": { "type": "string", "description": "Cgroup permissions for the device (rwm)." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } ] } }, "dns": { "$ref": "#/definitions/string_or_list", "description": "Custom DNS servers to set for the service container." }, "dns_opt": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "Custom DNS options to be passed to the container's DNS resolver." }, "dns_search": { "$ref": "#/definitions/string_or_list", "description": "Custom DNS search domains to set on the service container." }, "domainname": { "type": "string", "description": "Custom domain name to use for the service container." }, "entrypoint": { "$ref": "#/definitions/command", "description": "Override the default entrypoint declared by the container image, for example 'ENTRYPOINT' in Dockerfile." }, "env_file": { "$ref": "#/definitions/env_file", "description": "Add environment variables from a file or multiple files. Can be a single file path or a list of file paths." }, "label_file": { "$ref": "#/definitions/label_file", "description": "Add metadata to containers using files containing Docker labels." }, "environment": { "$ref": "#/definitions/list_or_dict", "description": "Add environment variables. You can use either an array or a list of KEY=VAL pairs." }, "expose": { "type": "array", "items": { "type": ["string", "number"] }, "uniqueItems": true, "description": "Expose ports without publishing them to the host machine - they'll only be accessible to linked services." }, "extends": { "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "service": { "type": "string", "description": "The name of the service to extend." }, "file": { "type": "string", "description": "The file path where the service to extend is defined." } }, "required": ["service"], "additionalProperties": false } ], "description": "Extend another service, in the current file or another file." }, "provider": { "type": "object", "description": "Specify a service which will not be manage by Compose directly, and delegate its management to an external provider.", "required": ["type"], "properties": { "type": { "type": "string", "description": "External component used by Compose to manage setup and teardown lifecycle of the service." }, "options": { "type": "object", "description": "Provider-specific options.", "patternProperties": { "^.+$": { "oneOf": [ { "type": ["string", "number", "boolean"] }, { "type": "array", "items": { "type": ["string", "number", "boolean"] } } ] } } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "external_links": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "Link to services started outside this Compose application. Specify services as <service_name>:<alias>." }, "extra_hosts": { "$ref": "#/definitions/extra_hosts", "description": "Add hostname mappings to the container network interface configuration." }, "gpus": { "$ref": "#/definitions/gpus", "description": "Define GPU devices to use. Can be set to 'all' to use all GPUs, or a list of specific GPU devices." }, "group_add": { "type": "array", "items": { "type": ["string", "number"] }, "uniqueItems": true, "description": "Add additional groups which user inside the container should be member of." }, "healthcheck": { "$ref": "#/definitions/healthcheck", "description": "Configure a health check for the container to monitor its health status." }, "hostname": { "type": "string", "description": "Define a custom hostname for the service container." }, "image": { "type": "string", "description": "Specify the image to start the container from. Can be a repository/tag, a digest, or a local image ID." }, "init": { "type": ["boolean", "string"], "description": "Run as an init process inside the container that forwards signals and reaps processes." }, "ipc": { "type": "string", "description": "IPC sharing mode for the service container. Use 'host' to share the host's IPC namespace, 'service:[service_name]' to share with another service, or 'shareable' to allow other services to share this service's IPC namespace." }, "isolation": { "type": "string", "description": "Container isolation technology to use. Supported values are platform-specific." }, "labels": { "$ref": "#/definitions/list_or_dict", "description": "Add metadata to containers using Docker labels. You can use either an array or a list." }, "links": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "Link to containers in another service. Either specify both the service name and a link alias (SERVICE:ALIAS), or just the service name." }, "logging": { "type": "object", "description": "Logging configuration for the service.", "properties": { "driver": { "type": "string", "description": "Logging driver to use, such as 'json-file', 'syslog', 'journald', etc." }, "options": { "type": "object", "description": "Options for the logging driver.", "patternProperties": { "^.+$": { "type": ["string", "number", "null"] } } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "mac_address": { "type": "string", "description": "Container MAC address to set." }, "mem_limit": { "type": ["number", "string"], "description": "Memory limit for the container. A string value can use suffix like '2g' for 2 gigabytes." }, "mem_reservation": { "type": ["string", "integer"], "description": "Memory reservation for the container." }, "mem_swappiness": { "type": ["integer", "string"], "description": "Container memory swappiness as percentage (0 to 100)." }, "memswap_limit": { "type": ["number", "string"], "description": "Amount of memory the container is allowed to swap to disk. Set to -1 to enable unlimited swap." }, "network_mode": { "type": "string", "description": "Network mode. Values can be 'bridge', 'host', 'none', 'service:[service name]', or 'container:[container name]'." }, "models": { "oneOf": [ { "$ref": "#/definitions/list_of_strings" }, { "type": "object", "patternProperties": { "^[a-zA-Z0-9._-]+$": { "type": "object", "properties": { "endpoint_var": { "type": "string", "description": "Environment variable set to AI model endpoint." }, "model_var": { "type": "string", "description": "Environment variable set to AI model name." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } } } ], "description": "AI Models to use, referencing entries under the top-level models key." }, "networks": { "oneOf": [ { "$ref": "#/definitions/list_of_strings" }, { "type": "object", "patternProperties": { "^[a-zA-Z0-9._-]+$": { "oneOf": [ { "type": "object", "properties": { "aliases": { "$ref": "#/definitions/list_of_strings", "description": "Alternative hostnames for this service on the network." }, "interface_name": { "type": "string", "description": "Interface network name used to connect to network" }, "ipv4_address": { "type": "string", "description": "Specify a static IPv4 address for this service on this network." }, "ipv6_address": { "type": "string", "description": "Specify a static IPv6 address for this service on this network." }, "link_local_ips": { "$ref": "#/definitions/list_of_strings", "description": "List of link-local IPs." }, "mac_address": { "type": "string", "description": "Specify a MAC address for this service on this network." }, "driver_opts": { "type": "object", "description": "Driver options for this network.", "patternProperties": { "^.+$": { "type": ["string", "number"] } } }, "priority": { "type": "number", "description": "Specify the priority for the network connection." }, "gw_priority": { "type": "number", "description": "Specify the gateway priority for the network connection." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, { "type": "null" } ] } }, "additionalProperties": false } ], "description": "Networks to join, referencing entries under the top-level networks key. Can be a list of network names or a mapping of network name to network configuration." }, "oom_kill_disable": { "type": ["boolean", "string"], "description": "Disable OOM Killer for the container." }, "oom_score_adj": { "oneOf": [ { "type": "string" }, { "type": "integer", "minimum": -1000, "maximum": 1000 } ], "description": "Tune host's OOM preferences for the container (accepts -1000 to 1000)." }, "pid": { "type": ["string", "null"], "description": "PID mode for container." }, "pids_limit": { "type": ["number", "string"], "description": "Tune a container's PIDs limit. Set to -1 for unlimited PIDs." }, "platform": { "type": "string", "description": "Target platform to run on, e.g., 'linux/amd64', 'linux/arm64', or 'windows/amd64'." }, "ports": { "type": "array", "description": "Expose container ports. Short format ([HOST:]CONTAINER[/PROTOCOL]).", "items": { "oneOf": [ { "type": "number" }, { "type": "string" }, { "type": "object", "properties": { "name": { "type": "string", "description": "A human-readable name for this port mapping." }, "mode": { "type": "string", "description": "The port binding mode, either 'host' for publishing a host port or 'ingress' for load balancing." }, "host_ip": { "type": "string", "description": "The host IP to bind to." }, "target": { "type": ["integer", "string"], "description": "The port inside the container." }, "published": { "type": ["string", "integer"], "description": "The publicly exposed port." }, "protocol": { "type": "string", "description": "The port protocol (tcp or udp)." }, "app_protocol": { "type": "string", "description": "Application protocol to use with the port (e.g., http, https, mysql)." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } ] }, "uniqueItems": true }, "post_start": { "type": "array", "items": { "$ref": "#/definitions/service_hook" }, "description": "Commands to run after the container starts. If any command fails, the container stops." }, "pre_stop": { "type": "array", "items": { "$ref": "#/definitions/service_hook" }, "description": "Commands to run before the container stops. If any command fails, the container stop is aborted." }, "privileged": { "type": ["boolean", "string"], "description": "Give extended privileges to the service container." }, "profiles": { "$ref": "#/definitions/list_of_strings", "description": "List of profiles for this service. When profiles are specified, services are only started when the profile is activated." }, "pull_policy": { "type": "string", "pattern": "always|never|build|if_not_present|missing|refresh|daily|weekly|every_([0-9]+[wdhms])+", "description": "Policy for pulling images. Options include: 'always', 'never', 'if_not_present', 'missing', 'build', or time-based refresh policies." }, "pull_refresh_after": { "type": "string", "description": "Time after which to refresh the image. Used with pull_policy=refresh." }, "read_only": { "type": ["boolean", "string"], "description": "Mount the container's filesystem as read only." }, "restart": { "type": "string", "description": "Restart policy for the service container. Options include: 'no', 'always', 'on-failure', and 'unless-stopped'." }, "runtime": { "type": "string", "description": "Runtime to use for this container, e.g., 'runc'." }, "scale": { "type": ["integer", "string"], "description": "Number of containers to deploy for this service." }, "security_opt": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "Override the default labeling scheme for each container." }, "shm_size": { "type": ["number", "string"], "description": "Size of /dev/shm. A string value can use suffix like '2g' for 2 gigabytes." }, "secrets": { "$ref": "#/definitions/service_config_or_secret", "description": "Grant access to Secrets on a per-service basis." }, "sysctls": { "$ref": "#/definitions/list_or_dict", "description": "Kernel parameters to set in the container. You can use either an array or a list." }, "stdin_open": { "type": ["boolean", "string"], "description": "Keep STDIN open even if not attached." }, "stop_grace_period": { "type": "string", "description": "Time to wait for the container to stop gracefully before sending SIGKILL (e.g., '1s', '1m30s')." }, "stop_signal": { "type": "string", "description": "Signal to stop the container (e.g., 'SIGTERM', 'SIGINT')." }, "storage_opt": { "type": "object", "description": "Storage driver options for the container." }, "tmpfs": { "$ref": "#/definitions/string_or_list", "description": "Mount a temporary filesystem (tmpfs) into the container. Can be a single value or a list." }, "tty": { "type": ["boolean", "string"], "description": "Allocate a pseudo-TTY to service container." }, "ulimits": { "$ref": "#/definitions/ulimits", "description": "Override the default ulimits for a container." }, "use_api_socket": { "type": "boolean", "description": "Bind mount Docker API socket and required auth." }, "user": { "type": "string", "description": "Username or UID to run the container process as." }, "uts": { "type": "string", "description": "UTS namespace to use. 'host' shares the host's UTS namespace." }, "userns_mode": { "type": "string", "description": "User namespace to use. 'host' shares the host's user namespace." }, "volumes": { "type": "array", "description": "Mount host paths or named volumes accessible to the container. Short syntax (VOLUME:CONTAINER_PATH[:MODE])", "items": { "oneOf": [ { "type": "string" }, { "type": "object", "required": ["type"], "properties": { "type": { "type": "string", "enum": [ "bind", "volume", "tmpfs", "cluster", "npipe", "image" ], "description": "The mount type: bind for mounting host directories, volume for named volumes, tmpfs for temporary filesystems, cluster for cluster volumes, npipe for named pipes, or image for mounting from an image." }, "source": { "type": "string", "description": "The source of the mount, a path on the host for a bind mount, a docker image reference for an image mount, or the name of a volume defined in the top-level volumes key. Not applicable for a tmpfs mount." }, "target": { "type": "string", "description": "The path in the container where the volume is mounted." }, "read_only": { "type": ["boolean", "string"], "description": "Flag to set the volume as read-only." }, "consistency": { "type": "string", "description": "The consistency requirements for the mount. Available values are platform specific." }, "bind": { "type": "object", "description": "Configuration specific to bind mounts.", "properties": { "propagation": { "type": "string", "description": "The propagation mode for the bind mount: 'shared', 'slave', 'private', 'rshared', 'rslave', or 'rprivate'." }, "create_host_path": { "type": ["boolean", "string"], "description": "Create the host path if it doesn't exist." }, "recursive": { "type": "string", "enum": ["enabled", "disabled", "writable", "readonly"], "description": "Recursively mount the source directory." }, "selinux": { "type": "string", "enum": ["z", "Z"], "description": "SELinux relabeling options: 'z' for shared content, 'Z' for private unshared content." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "volume": { "type": "object", "description": "Configuration specific to volume mounts.", "properties": { "labels": { "$ref": "#/definitions/list_or_dict", "description": "Labels to apply to the volume." }, "nocopy": { "type": ["boolean", "string"], "description": "Flag to disable copying of data from a container when a volume is created." }, "subpath": { "type": "string", "description": "Path within the volume to mount instead of the volume root." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "tmpfs": { "type": "object", "description": "Configuration specific to tmpfs mounts.", "properties": { "size": { "oneOf": [ { "type": "integer", "minimum": 0 }, { "type": "string" } ], "description": "Size of the tmpfs mount in bytes." }, "mode": { "type": ["number", "string"], "description": "File mode of the tmpfs in octal." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "image": { "type": "object", "description": "Configuration specific to image mounts.", "properties": { "subpath": { "type": "string", "description": "Path within the image to mount instead of the image root." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } ] }, "uniqueItems": true }, "volumes_from": { "type": "array", "items": { "type": "string" }, "uniqueItems": true, "description": "Mount volumes from another service or container. Optionally specify read-only access (ro) or read-write (rw)." }, "working_dir": { "type": "string", "description": "The working directory in which the entrypoint or command will be run" } }, "patternProperties": { "^x-": {} }, "additionalProperties": false },
"healthcheck": { "type": "object", "description": "Configuration options to determine whether the container is healthy.", "properties": { "disable": { "type": ["boolean", "string"], "description": "Disable any container-specified healthcheck. Set to true to disable." }, "interval": { "type": "string", "description": "Time between running the check (e.g., '1s', '1m30s'). Default: 30s." }, "retries": { "type": ["number", "string"], "description": "Number of consecutive failures needed to consider the container as unhealthy. Default: 3." }, "test": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ], "description": "The test to perform to check container health. Can be a string or a list. The first item is either NONE, CMD, or CMD-SHELL. If it's CMD, the rest of the command is exec'd. If it's CMD-SHELL, the rest is run in the shell." }, "timeout": { "type": "string", "description": "Maximum time to allow one check to run (e.g., '1s', '1m30s'). Default: 30s." }, "start_period": { "type": "string", "description": "Start period for the container to initialize before starting health-retries countdown (e.g., '1s', '1m30s'). Default: 0s." }, "start_interval": { "type": "string", "description": "Time between running the check during the start period (e.g., '1s', '1m30s'). Default: interval value." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "development": { "type": ["object", "null"], "description": "Development configuration for the service, used for development workflows.", "properties": { "watch": { "type": "array", "description": "Configure watch mode for the service, which monitors file changes and performs actions in response.", "items": { "type": "object", "required": ["path", "action"], "properties": { "ignore": { "$ref": "#/definitions/string_or_list", "description": "Patterns to exclude from watching." }, "include": { "$ref": "#/definitions/string_or_list", "description": "Patterns to include in watching." }, "path": { "type": "string", "description": "Path to watch for changes." }, "action": { "type": "string", "enum": [ "rebuild", "sync", "restart", "sync+restart", "sync+exec" ], "description": "Action to take when a change is detected: rebuild the container, sync files, restart the container, sync and restart, or sync and execute a command." }, "target": { "type": "string", "description": "Target path in the container for sync operations." }, "exec": { "$ref": "#/definitions/service_hook", "description": "Command to execute when a change is detected and action is sync+exec." }, "initial_sync": { "type": "boolean", "description": "Ensure that an initial synchronization is done before starting watch mode for sync+x triggers" } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "deployment": { "type": ["object", "null"], "description": "Deployment configuration for the service.", "properties": { "mode": { "type": "string", "description": "Deployment mode for the service: 'replicated' (default) or 'global'." }, "endpoint_mode": { "type": "string", "description": "Endpoint mode for the service: 'vip' (default) or 'dnsrr'." }, "replicas": { "type": ["integer", "string"], "description": "Number of replicas of the service container to run." }, "labels": { "$ref": "#/definitions/list_or_dict", "description": "Labels to apply to the service." }, "rollback_config": { "type": "object", "description": "Configuration for rolling back a service update.", "properties": { "parallelism": { "type": ["integer", "string"], "description": "The number of containers to rollback at a time. If set to 0, all containers rollback simultaneously." }, "delay": { "type": "string", "description": "The time to wait between each container group's rollback (e.g., '1s', '1m30s')." }, "failure_action": { "type": "string", "description": "Action to take if a rollback fails: 'continue', 'pause'." }, "monitor": { "type": "string", "description": "Duration to monitor each task for failures after it is created (e.g., '1s', '1m30s')." }, "max_failure_ratio": { "type": ["number", "string"], "description": "Failure rate to tolerate during a rollback." }, "order": { "type": "string", "enum": ["start-first", "stop-first"], "description": "Order of operations during rollbacks: 'stop-first' (default) or 'start-first'." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "update_config": { "type": "object", "description": "Configuration for updating a service.", "properties": { "parallelism": { "type": ["integer", "string"], "description": "The number of containers to update at a time." }, "delay": { "type": "string", "description": "The time to wait between updating a group of containers (e.g., '1s', '1m30s')." }, "failure_action": { "type": "string", "description": "Action to take if an update fails: 'continue', 'pause', 'rollback'." }, "monitor": { "type": "string", "description": "Duration to monitor each updated task for failures after it is created (e.g., '1s', '1m30s')." }, "max_failure_ratio": { "type": ["number", "string"], "description": "Failure rate to tolerate during an update (0 to 1)." }, "order": { "type": "string", "enum": ["start-first", "stop-first"], "description": "Order of operations during updates: 'stop-first' (default) or 'start-first'." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "resources": { "type": "object", "description": "Resource constraints and reservations for the service.", "properties": { "limits": { "type": "object", "description": "Resource limits for the service containers.", "properties": { "cpus": { "type": ["number", "string"], "description": "Limit for how much of the available CPU resources, as number of cores, a container can use." }, "memory": { "type": "string", "description": "Limit on the amount of memory a container can allocate (e.g., '1g', '1024m')." }, "pids": { "type": ["integer", "string"], "description": "Maximum number of PIDs available to the container." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "reservations": { "type": "object", "description": "Resource reservations for the service containers.", "properties": { "cpus": { "type": ["number", "string"], "description": "Reservation for how much of the available CPU resources, as number of cores, a container can use." }, "memory": { "type": "string", "description": "Reservation on the amount of memory a container can allocate (e.g., '1g', '1024m')." }, "generic_resources": { "$ref": "#/definitions/generic_resources", "description": "User-defined resources to reserve." }, "devices": { "$ref": "#/definitions/devices", "description": "Device reservations for the container." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "restart_policy": { "type": "object", "description": "Restart policy for the service containers.", "properties": { "condition": { "type": "string", "description": "Condition for restarting the container: 'none', 'on-failure', 'any'." }, "delay": { "type": "string", "description": "Delay between restart attempts (e.g., '1s', '1m30s')." }, "max_attempts": { "type": ["integer", "string"], "description": "Maximum number of restart attempts before giving up." }, "window": { "type": "string", "description": "Time window used to evaluate the restart policy (e.g., '1s', '1m30s')." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "placement": { "type": "object", "description": "Constraints and preferences for the platform to select a physical node to run service containers", "properties": { "constraints": { "type": "array", "items": { "type": "string" }, "description": "Placement constraints for the service (e.g., 'node.role==manager')." }, "preferences": { "type": "array", "description": "Placement preferences for the service.", "items": { "type": "object", "properties": { "spread": { "type": "string", "description": "Spread tasks evenly across values of the specified node label." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } }, "max_replicas_per_node": { "type": ["integer", "string"], "description": "Maximum number of replicas of the service." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } },
"generic_resources": { "type": "array", "description": "User-defined resources for services, allowing services to reserve specialized hardware resources.", "items": { "type": "object", "properties": { "discrete_resource_spec": { "type": "object", "description": "Specification for discrete (countable) resources.", "properties": { "kind": { "type": "string", "description": "Type of resource (e.g., 'GPU', 'FPGA', 'SSD')." }, "value": { "type": ["number", "string"], "description": "Number of resources of this kind to reserve." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } },
"devices": { "type": "array", "description": "Device reservations for containers, allowing services to access specific hardware devices.", "items": { "type": "object", "properties": { "capabilities": { "$ref": "#/definitions/list_of_strings", "description": "List of capabilities the device needs to have (e.g., 'gpu', 'compute', 'utility')." }, "count": { "type": ["string", "integer"], "description": "Number of devices of this type to reserve." }, "device_ids": { "$ref": "#/definitions/list_of_strings", "description": "List of specific device IDs to reserve." }, "driver": { "type": "string", "description": "Device driver to use (e.g., 'nvidia')." }, "options": { "$ref": "#/definitions/list_or_dict", "description": "Driver-specific options for the device." } }, "additionalProperties": false, "patternProperties": { "^x-": {} }, "required": ["capabilities"] } },
"gpus": { "oneOf": [ { "type": "string", "enum": ["all"], "description": "Use all available GPUs." }, { "type": "array", "description": "List of specific GPU devices to use.", "items": { "type": "object", "properties": { "capabilities": { "$ref": "#/definitions/list_of_strings", "description": "List of capabilities the GPU needs to have (e.g., 'compute', 'utility')." }, "count": { "type": ["string", "integer"], "description": "Number of GPUs to use." }, "device_ids": { "$ref": "#/definitions/list_of_strings", "description": "List of specific GPU device IDs to use." }, "driver": { "type": "string", "description": "GPU driver to use (e.g., 'nvidia')." }, "options": { "$ref": "#/definitions/list_or_dict", "description": "Driver-specific options for the GPU." } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } ] },
"include": { "description": "Compose application or sub-projects to be included.", "oneOf": [ { "type": "string" }, { "type": "object", "properties": { "path": { "$ref": "#/definitions/string_or_list", "description": "Path to the Compose application or sub-project files to include." }, "env_file": { "$ref": "#/definitions/string_or_list", "description": "Path to the environment files to use to define default values when interpolating variables in the Compose files being parsed." }, "project_directory": { "type": "string", "description": "Path to resolve relative paths set in the Compose file" } }, "additionalProperties": false } ] },
"network": { "type": ["object", "null"], "description": "Network configuration for the Compose application.", "properties": { "name": { "type": "string", "description": "Custom name for this network." }, "driver": { "type": "string", "description": "Specify which driver should be used for this network. Default is 'bridge'." }, "driver_opts": { "type": "object", "description": "Specify driver-specific options defined as key/value pairs.", "patternProperties": { "^.+$": { "type": ["string", "number"] } } }, "ipam": { "type": "object", "description": "Custom IP Address Management configuration for this network.", "properties": { "driver": { "type": "string", "description": "Custom IPAM driver, instead of the default." }, "config": { "type": "array", "description": "List of IPAM configuration blocks.", "items": { "type": "object", "properties": { "subnet": { "type": "string", "description": "Subnet in CIDR format that represents a network segment." }, "ip_range": { "type": "string", "description": "Range of IPs from which to allocate container IPs." }, "gateway": { "type": "string", "description": "IPv4 or IPv6 gateway for the subnet." }, "aux_addresses": { "type": "object", "description": "Auxiliary IPv4 or IPv6 addresses used by Network driver.", "additionalProperties": false, "patternProperties": { "^.+$": { "type": "string" } } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } }, "options": { "type": "object", "description": "Driver-specific options for the IPAM driver.", "additionalProperties": false, "patternProperties": { "^.+$": { "type": "string" } } } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "external": { "type": ["boolean", "string", "object"], "description": "Specifies that this network already exists and was created outside of Compose.", "properties": { "name": { "deprecated": true, "type": "string", "description": "Specifies the name of the external network. Deprecated: use the 'name' property instead." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "internal": { "type": ["boolean", "string"], "description": "Create an externally isolated network." }, "enable_ipv4": { "type": ["boolean", "string"], "description": "Enable IPv4 networking." }, "enable_ipv6": { "type": ["boolean", "string"], "description": "Enable IPv6 networking." }, "attachable": { "type": ["boolean", "string"], "description": "If true, standalone containers can attach to this network." }, "labels": { "$ref": "#/definitions/list_or_dict", "description": "Add metadata to the network using labels." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } },
"volume": { "type": ["object", "null"], "description": "Volume configuration for the Compose application.", "properties": { "name": { "type": "string", "description": "Custom name for this volume." }, "driver": { "type": "string", "description": "Specify which volume driver should be used for this volume." }, "driver_opts": { "type": "object", "description": "Specify driver-specific options.", "patternProperties": { "^.+$": { "type": ["string", "number"] } } }, "external": { "type": ["boolean", "string", "object"], "description": "Specifies that this volume already exists and was created outside of Compose.", "properties": { "name": { "deprecated": true, "type": "string", "description": "Specifies the name of the external volume. Deprecated: use the 'name' property instead." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } }, "labels": { "$ref": "#/definitions/list_or_dict", "description": "Add metadata to the volume using labels." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } },
"secret": { "type": "object", "description": "Secret configuration for the Compose application.", "properties": { "name": { "type": "string", "description": "Custom name for this secret." }, "environment": { "type": "string", "description": "Name of an environment variable from which to get the secret value." }, "file": { "type": "string", "description": "Path to a file containing the secret value." }, "external": { "type": ["boolean", "string", "object"], "description": "Specifies that this secret already exists and was created outside of Compose.", "properties": { "name": { "type": "string", "description": "Specifies the name of the external secret." } } }, "labels": { "$ref": "#/definitions/list_or_dict", "description": "Add metadata to the secret using labels." }, "driver": { "type": "string", "description": "Specify which secret driver should be used for this secret." }, "driver_opts": { "type": "object", "description": "Specify driver-specific options.", "patternProperties": { "^.+$": { "type": ["string", "number"] } } }, "template_driver": { "type": "string", "description": "Driver to use for templating the secret's value." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } },
"config": { "type": "object", "description": "Config configuration for the Compose application.", "properties": { "name": { "type": "string", "description": "Custom name for this config." }, "content": { "type": "string", "description": "Inline content of the config." }, "environment": { "type": "string", "description": "Name of an environment variable from which to get the config value." }, "file": { "type": "string", "description": "Path to a file containing the config value." }, "external": { "type": ["boolean", "string", "object"], "description": "Specifies that this config already exists and was created outside of Compose.", "properties": { "name": { "deprecated": true, "type": "string", "description": "Specifies the name of the external config. Deprecated: use the 'name' property instead." } } }, "labels": { "$ref": "#/definitions/list_or_dict", "description": "Add metadata to the config using labels." }, "template_driver": { "type": "string", "description": "Driver to use for templating the config's value." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } },
"model": { "type": "object", "description": "Language Model for the Compose application.", "properties": { "name": { "type": "string", "description": "Custom name for this model." }, "model": { "type": "string", "description": "Language Model to run." }, "context_size": { "type": "integer" }, "runtime_flags": { "type": "array", "items": { "type": "string" }, "description": "Raw runtime flags to pass to the inference engine." } }, "required": ["model"], "additionalProperties": false, "patternProperties": { "^x-": {} } },
"command": { "oneOf": [ { "type": "null", "description": "No command specified, use the container's default command." }, { "type": "string", "description": "Command as a string, which will be executed in a shell (e.g., '/bin/sh -c')." }, { "type": "array", "description": "Command as an array of strings, which will be executed directly without a shell.", "items": { "type": "string", "description": "Part of the command (executable or argument)." } } ], "description": "Command to run in the container, which can be specified as a string (shell form) or array (exec form)." },
"service_hook": { "type": "object", "description": "Configuration for service lifecycle hooks, which are commands executed at specific points in a container's lifecycle.", "properties": { "command": { "$ref": "#/definitions/command", "description": "Command to execute as part of the hook." }, "user": { "type": "string", "description": "User to run the command as." }, "privileged": { "type": ["boolean", "string"], "description": "Whether to run the command with extended privileges." }, "working_dir": { "type": "string", "description": "Working directory for the command." }, "environment": { "$ref": "#/definitions/list_or_dict", "description": "Environment variables for the command." } }, "additionalProperties": false, "patternProperties": { "^x-": {} }, "required": ["command"] },
"env_file": { "oneOf": [ { "type": "string", "description": "Path to a file containing environment variables." }, { "type": "array", "description": "List of paths to files containing environment variables.", "items": { "oneOf": [ { "type": "string", "description": "Path to a file containing environment variables." }, { "type": "object", "description": "Detailed configuration for an environment file.", "additionalProperties": false, "properties": { "path": { "type": "string", "description": "Path to the environment file." }, "format": { "type": "string", "description": "Format attribute lets you to use an alternative file formats for env_file. When not set, env_file is parsed according to Compose rules." }, "required": { "type": ["boolean", "string"], "default": true, "description": "Whether the file is required. If true and the file doesn't exist, an error will be raised." } }, "required": ["path"] } ] } } ] },
"label_file": { "oneOf": [ { "type": "string", "description": "Path to a file containing Docker labels." }, { "type": "array", "description": "List of paths to files containing Docker labels.", "items": { "type": "string", "description": "Path to a file containing Docker labels." } } ] },
"string_or_list": { "oneOf": [ { "type": "string", "description": "A single string value." }, { "$ref": "#/definitions/list_of_strings", "description": "A list of string values." } ], "description": "Either a single string or a list of strings." },
"list_of_strings": { "type": "array", "description": "A list of unique string values.", "items": { "type": "string", "description": "A string value in the list." }, "uniqueItems": true },
"list_or_dict": { "oneOf": [ { "type": "object", "description": "A dictionary mapping keys to values.", "patternProperties": { ".+": { "type": ["string", "number", "boolean", "null"], "description": "Value for the key, which can be a string, number, boolean, or null." } }, "additionalProperties": false }, { "type": "array", "description": "A list of unique string values.", "items": { "type": "string", "description": "A string value in the list." }, "uniqueItems": true } ], "description": "Either a dictionary mapping keys to values, or a list of strings." },
"extra_hosts": { "oneOf": [ { "type": "object", "description": "list mapping hostnames to IP addresses.", "patternProperties": { ".+": { "oneOf": [ { "type": "string", "description": "IP address for the hostname." }, { "type": "array", "description": "List of IP addresses for the hostname.", "items": { "type": "string", "description": "IP address for the hostname." }, "uniqueItems": false } ] } }, "additionalProperties": false }, { "type": "array", "description": "List of host:IP mappings in the format 'hostname:IP'.", "items": { "type": "string", "description": "Host:IP mapping in the format 'hostname:IP'." }, "uniqueItems": true } ], "description": "Additional hostnames to be defined in the container's /etc/hosts file." },
"blkio_limit": { "type": "object", "description": "Block IO limit for a specific device.", "properties": { "path": { "type": "string", "description": "Path to the device (e.g., '/dev/sda')." }, "rate": { "type": ["integer", "string"], "description": "Rate limit in bytes per second or IO operations per second." } }, "additionalProperties": false }, "blkio_weight": { "type": "object", "description": "Block IO weight for a specific device.", "properties": { "path": { "type": "string", "description": "Path to the device (e.g., '/dev/sda')." }, "weight": { "type": ["integer", "string"], "description": "Relative weight for the device, between 10 and 1000." } }, "additionalProperties": false }, "service_config_or_secret": { "type": "array", "description": "Configuration for service configs or secrets, defining how they are mounted in the container.", "items": { "oneOf": [ { "type": "string", "description": "Name of the config or secret to grant access to." }, { "type": "object", "description": "Detailed configuration for a config or secret.", "properties": { "source": { "type": "string", "description": "Name of the config or secret as defined in the top-level configs or secrets section." }, "target": { "type": "string", "description": "Path in the container where the config or secret will be mounted. Defaults to /<source> for configs and /run/secrets/<source> for secrets." }, "uid": { "type": "string", "description": "UID of the file in the container. Default is 0 (root)." }, "gid": { "type": "string", "description": "GID of the file in the container. Default is 0 (root)." }, "mode": { "type": ["number", "string"], "description": "File permission mode inside the container, in octal. Default is 0444 for configs and 0400 for secrets." } }, "additionalProperties": false, "patternProperties": { "^x-": {} } } ] } }, "ulimits": { "type": "object", "description": "Container ulimit options, controlling resource limits for processes inside the container.", "patternProperties": { "^[a-z]+$": { "oneOf": [ { "type": ["integer", "string"], "description": "Single value for both soft and hard limits." }, { "type": "object", "description": "Separate soft and hard limits.", "properties": { "hard": { "type": ["integer", "string"], "description": "Hard limit for the ulimit type. This is the maximum allowed value." }, "soft": { "type": ["integer", "string"], "description": "Soft limit for the ulimit type. This is the value that's actually enforced." } }, "required": ["soft", "hard"], "additionalProperties": false, "patternProperties": { "^x-": {} } } ] } } } }}