UNPKG

@softvisio/core

Version:
315 lines (283 loc) • 9.97 kB
# DOCS: https://docs.docker.com/compose/compose-file/ - $id: compose type: object properties: version: { type: string } name: { type: string } services: type: object propertyNames: { type: string } additionalProperties: type: object properties: image: { type: string } depends_on: anyOf: - { type: array, items: { type: string } } - type: object propertyNames: { type: string } additionalProperties: type: object properties: restart: { type: boolean } condition: { enum: [service_started, service_healthy, service_completed_successfully] } required: { type: boolean } additionalProperties: false required: [] init: { type: boolean } stop_grace_period: { type: string } # DOCS: https://docs.docker.com/reference/compose-file/deploy/ deploy: anyOf: - type: object properties: mode: { const: global } endpoint_mode: { enum: [vip, dnsrr] } resources: { $ref: resources } labels: { $ref: labels } required: [mode] additionalProperties: false - type: object properties: mode: { const: replicated } endpoint_mode: { enum: [vip, dnsrr] } replicas: { type: integer, minimum: 0 } placement: type: object properties: max_replicas_per_node: { type: integer, minimum: 1 } constraints: { type: array, items: { type: string }, minItems: 1, uniqueItems: true } required: [] additionalProperties: false resources: { $ref: resources } labels: { $ref: labels } required: [replicas] additionalProperties: false healthcheck: type: object properties: test: { type: string } start_period: { type: string } interval: { type: string } timeout: { type: string } retries: { type: integer, minimum: 1 } required: [test, start_period, interval, timeout, retries] additionalProperties: false environment: type: object additionalProperties: { type: [number, string] } command: { type: string } configs: type: array items: type: object properties: source: { type: string } target: { type: string } required: [source, target] additionalProperties: false secrets: type: array items: type: object properties: source: { type: string } target: { type: string } required: [source, target] additionalProperties: false networks: { type: array, items: { type: string }, minItems: 1, uniqueItems: true } ports: type: array items: type: object properties: name: { type: string } published: { type: integer, format: ip-port } target: { type: integer, format: ip-port } protocol: { enum: [tcp, udp] } mode: { enum: [ingress, host] } # NOTE: not allowed in stack # host_ip: { type: string, format: host } # NOTE: try format ip-address instead required: [published, target] additionalProperties: false minItems: 1 volumes: type: array items: anyOf: - type: object properties: type: { const: tmpfs } target: { type: string } tmpfs: type: object properties: size: { type: integer, minimum: 1 } required: [size] additionalProperties: false required: [type, target, tmpfs] additionalProperties: false - type: object properties: type: { enum: [bind, volume] } source: { type: string } target: { type: string } required: [type, source, target] additionalProperties: false build: { $ref: build } required: [image] additionalProperties: false configs: type: object propertyNames: { type: string } additionalProperties: anyOf: - type: object properties: name: { type: string } file: { type: string } additionalProperties: false required: [file] - type: object properties: name: { type: string } environment: { type: string } additionalProperties: false required: [environment] - type: object properties: name: { type: string } content: { type: string } additionalProperties: false required: [content] - type: object properties: name: { type: string } external: { const: true } additionalProperties: false required: [external] secrets: type: object propertyNames: { type: string } additionalProperties: anyOf: - type: object properties: file: { type: string } additionalProperties: false required: [file] - type: object properties: environment: { type: string } additionalProperties: false required: [environment] networks: type: object propertyNames: { type: string } additionalProperties: anyOf: - type: "null" # external - type: object properties: name: { type: string } external: { const: true } additionalProperties: false required: [external] - type: object properties: name: { type: string } driver: { enum: [bridge, host, overlay, ipvlan, macvlan, none] } driver_opts: { type: object } attachable: { type: boolean } internal: { type: boolean } enable_ipv6: { type: boolean } labels: { $ref: labels } ipam: type: object properties: driver: { enum: [bridge, host, overlay, ipvlan, macvlan, none] } config: type: array minItems: 1 items: type: object properties: subnet: { type: string, format: ip-subnet } ip_range: { type: string, format: ip-subnet } gateway: { type: string, format: ip-address } aux_addresses: type: object propertyNames: { type: string, format: domain } additionalProperties: { type: string, format: ip-address } additionalProperties: false options: { type: object } additionalProperties: false additionalProperties: false volumes: type: object propertyNames: { type: string } additionalProperties: anyOf: - type: "null" - type: object properties: driver: { type: string } driver_opts: { type: object } external: { type: boolean } labels: { $ref: labels } name: { type: string } required: [] required: [services] additionalProperties: false - $id: labels anyOf: - type: object additionalProperties: { type: string } - type: array items: { type: string } - $id: resources anyOf: - type: "null" - type: object properties: limits: type: object properties: cpus: { type: number } memory: { type: string, format: digital-size } pids: { type: integer } additionalProperties: false reservations: type: object properties: cpus: { type: number } memory: { type: string, format: digital-size } generic_resources: type: array items: type: object properties: discrete_resource_spec: type: object properties: kind: { type: string } value: { type: integer } additionalProperties: false required: [kind, value] additionalProperties: false additionalProperties: false minProperties: 1 - $id: build # DOCS: https://docs.docker.com/reference/compose-file/build/ anyOf: - type: string - type: object properties: context: { type: string } dockerfile: { type: string } args: type: object additionalProperties: { type: [number, string] } minProperties: 1 additionalProperties: false