dclint
Version:
A command-line tool for validating and enforcing best practices in Docker Compose files.
1,175 lines (1,160 loc) • 74.4 kB
JSON
{
"$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."},
"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."
}
},
"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": {